본문 바로가기

파이썬 공부/코딩 테스트 단순 코드

[프로그래머스] 행렬의 덧셈 등 LV 1 여러가지

def solution(n, m): # 두수를 입력받아서 최대 공약수 및 최소 공배수를 반환함 
    answer = []
    bigyaksu=0
    smallbasu=1000000000
    big, small = (n, m) if n > m else (m, n) # 삼항연산자로 둘 중 큰거를 빅에 넣음 
    for i in range(1, small + 1): # 작은 수를 기준으로 작은 수 자신까지 반복 
        if (small % i == 0) and (big % i == 0) and (bigyaksu < i): #둘 다 나눌 수 있는 값이며 기존 값보다 크면? 
            bigyaksu = i
        else: 
            continue # 아무것도 하지말고, 최대공약수 끝
    answer.append(bigyaksu)
    nst = []
    mst = [] # 공배수는 무식하게 해보자 
    for j in range(1,1000): # 천번씩 곱해서 리스트로 저장 
        nst.append(j*n)
        mst.append(j*m)
    
    for k in nst:
        for q in mst:
            if k==q:
                answer.append(k)
                return answer​
def solution(t, p): # t 라는 긴 숫자로 이뤄진 문자열을 받아와서 p라는 작은 숫자로 이뤄진 문자열보다 수가 작거나 같으면 횟수를 카운트
    answer = 0
    temp = 0
    s = 0
    e = len(p)
    check_int = int(p) # 체크해야하는 숫자값  
    while(len(t) >= e): # 긴 문자열보다 e가 같거나 작을때 while 문 탈출 
        temp= int(t[s:e]) # 슬라이스를 해서 집어넣음 , 단 정수형태로 
        if temp <= check_int: # 만약에 슬라이스 한 값이 작거나 같으면 ? 
            answer += 1 #카운트 
        s += 1 # 시작은 늘어나야함
        e += 1 # 끝도 마찬가지 
               
    return answer
def solution(arr1, arr2): # 입력받은 두가지의 행은 서로 더한 결과를 의미함 
    answer = []
    hang = 0 
    yol = 0
    for i in arr1: # 두가지의 행렬은 서로 행과 열의 길이가 같기에 arr1 만 세어줌 
        hang += 1 # 행은 그냥 계속 셈 
        if arr1.index(i) == 0: # 열은 그냥 첫번째만 세어주면 되니까 이때만 반복 
                for k in i:
                    yol += 1
    
    # 행렬의 길이가 서로 같다했음 
    for q in range(hang):
        templist=[] # 2차원 리스트를 만들어주려면 리스트 자체를 어펜드 해줘야하니까 임시로 만듦 
        for y in range(yol):
            templist.append( arr1[q][y] + arr2[q][y] ) # 해당 행렬에 맞는 원소끼리 더함 
        answer.append(templist) # 마지막으로 리스트틀 어펜드 
    return answer

 

이름은 이상한 문자 만들기 라는 문제 

아직 왜 해당 코드가 하나의 테스트 케이스에서 통과하는지 모르겠다. 나중에 복습해야겠다.

def solution(s): # 공백 포함 문자열 
    answer = ''
    wordlist= []
    wordlist=s.split(" ")
    for i in wordlist:
        if wordlist[0] != i:
            answer += ' '
        for j in range(len(i)):
            if (j % 2 == 0): # 짝수 인덱스인 경우 대문자로 바꾸어줘야함 
                if ord(i[j]) < ord('a') : # 대문자인경우 
                    answer += i[j]
                else : # 소문자인 경우 
                    answer += chr(ord(i[j]) - 32)
            else : #홀수 인덱스인 경우는 소문자로 바꿔야함
                if ord(i[j]) < ord('a') : # 대문자인경우 
                    answer += chr(ord(i[j]) + 32)
                else : # 소문자인 경우 
                    answer += i[j]
    
    return answer

정답코드는 다음과 같음 

 

def solution(s): # 공백 포함 문자열 
    answer = ''
    wordlist= []
    wordlist=s.split(" ")
    for i in wordlist:
        for j in range(len(i)):
            if j%2==0:
                answer += i[j].upper()
            else:
                answer += i[j].lower()
        answer += ' '
        
    return answer[:-1]