2022.07.01

프로그래머스 Lv.1 쉬운 문제들 피드백 모음 (3)

 

 

 

 

 

 

 

'문자열 내 p와 y의 개수' 문제

 

나의 답안

 

def solution(s):
    compare = 0
    for i in s:
        if i in ['p', 'P']:
            compare += 1
        elif i in ['y', 'Y']:
            compare -= 1
    if compare == 0:
        return True
    else:
        return False

 

모범 답안

 

def solution(s):
    
    return s.lower().count('p') == s.lower().count('y')

 

 

 

 

 


 

 

 

 

 

'문자열 내림차순으로 배치하기' 문제

 

나의 답안

 

def solution(s):
    
    low, up, answer = [], [], ''
    for i in s:
        if i.islower():
            low.append(i)
        else:
            up.append(i)
    
    for i in sorted(up):
        answer = i + answer
    for i in sorted(low):
        answer = i + answer
            
    return answer

 

모범 답안

 

def solution(s):

    return ''.join(sorted(s, reverse=True))

 

  • ' '.join( x ) : list인 x를 ' '로 구문하여 string으로 만들어서 return해줌. (ex. '--'.join([ 'a', 'b', 'c' ]) = 'a--b--c')

 

  • s.sort(reverse=True) : list인 s를 반대로 정렬
  • sorted(s, reverse=True) : list인 s를 반대로 정렬해서 return해줌.

 

 

 

 

 


 

 

 

 

 

'서울에서 김서방 찾기' 문제

 

나의 답안

 

def solution(seoul):
    for i, j in enumerate(seoul):
        if j == 'Kim':
            return '김서방은 ' + str(i) + '에 있다'

 

모범 답안

 

def solution(seoul):

    return '김서방은 {}에 있다'.format(seoul.index('Kim'))

 

  • x.index( 'a' ) : list인 x에서 a의 index를 찾아 return해줌.

 

 

 

 

 


 

 

 

 

 

'최대공약수와 최소공배수' 문제

 

나의 답안

 

def solution(n, m):
    if n == m:
        return [n, n]
    if n > m:
        n, m = m, n

    answer = []
    for i in range(n, 0, -1):
        if n % i == 0 and m % i == 0:
            answer.append(i)
            break

    check = 1
    while (True):
        if (m * check) % n == 0:
            return answer + [m * check]
        else:
            check += 1

    return answer

 

모범 답안

 

def solution(n, m):
    a, b = min(n, m), max(n, m)
    t = 1
    while t > 0:
        t = b % a
        b, a = a, t

    return [b, int(n*m/b)]

 

수학적 지식을 이용한 간결한 코드이다.

 

 

 

 

 


 

 

 

'행렬의 덧셈' 문제

 

나의 답안

 

def solution(arr1, arr2):
    answer = []
    for i in range(len(arr1)):
        new = []
        for j in range(len(arr1[0])):
            new.append(arr1[i][j] + arr2[i][j])
        answer.append(new)
    return answer

 

모범 답안 (1)

 

def solution(arr1, arr2):
    answer = [[c + d for c, d in zip(a, b)] for a, b in zip(arr1, arr2)]
    return answer

 

모범 답안 (2)

 

def solution(arr1, arr2):
    for i in range(len(arr1)) :
        for j in range(len(arr1[0])):
            arr1[i][j] += arr2[i][j] 
    return arr1

 

리스트를 새로 만들지 않고 arr1에 arr2를 추가하였다.

 

복사했습니다!