웹개발일지

프로그래머스 코딩테스트 입문 - 머쓱이보다 키 큰 사람[python] 본문

자료구조와 알고리즘

프로그래머스 코딩테스트 입문 - 머쓱이보다 키 큰 사람[python]

hee_log 2023. 5. 6. 02:10
728x90

 코테 풀이를 하고나서 내가 쓴 코드와 비교하여 다른 사람이 쓴 코드가 배울 점이 많다고 생각하여 기록하게 되었다. 

 

문제해석 

 아래 두 자료가 주어진다. 여기서 height보다 큰 수가 array에서 몇 개인지 찾는 문제이다. 

array = [160, 175, 180, 195] 
height = 170 

 

내가 쓴 코드 

def solution(array, height):
    count = 0

    for i in array:
        if i > height:
            count += 1
    return count

 굉장히 직관적으로 푼 편이다. height 보다 큰 요소의 '개수'를 구하는 것이므로, count 변수를 지정하여 array를 순회하며 조건문을 통해 height 보다 클 때 마다 count를 1씩 증가시켜 준 뒤 return 하였다. 

 

 

다른 사람의 코드 

def solution(array, height):
    array.append(height)
    array.sort(reverse=True)
    return array.index(height)

 첫 번째 코드이다. 리스트에 height 을 넣은뒤 내림차순 정렬하고 height가 몇번째 인덱스인지를 구해주면 그 인덱스 번호만큼 height앞으로 몇 개의 요소가 있는지를 알 수 있어 답을 구할 수 있다. 

 

def solution(array, height):
    return sum(1 for a in array if a > height)

 두 번째 코드이다. 이건 이해가 안되서 따로 찾아봤는데 .. 오.. if 조건문의 삼항 연산자를 사용했는데 그 반환값들을 sum()으로 묶어 array의 요소가 height보다 큰 경우를 조건으로 두어 True로 반환되는 횟수를 세어준 셈이다. 

  1. 리스트 array의 각 원소 a에 대해서,
  2. if a > height 조건을 만족하는 경우에는 1을 반환하고, 조건을 만족하지 않는 경우에는 0을 반환합니다.
  3. 이렇게 반환된 1 또는 0을 모두 더한 결과가 반환됩니다.

즉, sum(1 for a in array if a > height)은 리스트 array에서 height보다 큰 원소의 개수를 계산하는 코드입니다. 이 값을 return하여 함수의 결과로 반환합니다.