Algorithm/Programmers

[programmers lv.1 python] 없는 숫자 더하기

쉬지마 이굥진 2024. 8. 12. 00:09
 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

1차 풀이 (for문 사용) 👉 정답

def solution(numbers):
    num_list = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
    answer = 0
    
    for i in num_list:
        if i not in numbers:
            answer += i
    return answer

 

0~9로 이루어진 리스트 'num_list'를 순회하면서 numbers 배열에 없는 숫자를 찾고, if i not in numbers:를 사용하여 numbers에 없는 숫자를 answer에 더한 후 answer를 반환하는 간단한 코드이다.

 

시간 복잡도의 경우는 O(N * M)이 된다(N은 num_list의 길이, M은 numbers의 길이). num_list는 10개로 한정되어 있으니 정확히는 O(10 * M)일 것이다.

 

 

2차 풀이 (set 함수 사용) 👉 정답

set 함수를 사용해서 푸는 게 훨~ 씬 더 간단해진 다는 걸 다른 사람의 풀이를 보고 깨달았다 .. 그래서 set 함수를 추가적으로 학습해봤다.

 

[Python] 파이썬에서의 집합, set 함수

프로그래머스에서 문제를 풀다가, 나의 경우 for문으로 풀었던 문제를 다른 사람은 set 함수로 간단히 푼 것을 보고 set 함수를 자세히 찾아보게 되었다. 포스팅 하면서 set 함수의 사용법과 쓰임에

developer-jinnie.tistory.com

 

set 함수를 쓰면 위의 코드 6줄을 이 1줄로 축약 가능하다. 

def solution(numbers):
    return sum(set(range(10)) - set(numbers))
  • range(10): 0부터 9까지의 숫자를 생성한다.
  • set(numbers): 주어진 numbers 리스트를 집합으로 변환한다.
  • 차집합 연산: set(range(10)) - set(numbers)는 0부터 9까지의 집합에서 numbers 집합을 뺀 결과를 반환한다.
  • sum() 함수: 차집합으로 남은 숫자들의 합을 계산한다.

시간복잡도는 O(1)이 된다. range(10)은 상수 크기의 집합을 생성하고, numbers 배열의 크기가 최대 9 이므로 for문을 사용한 풀이와 비교하면 매우 빠른 연산이다.


마치며

처음에는 for문으로 풀었었는데, set 함수로 풀 수도 있었다는 걸 알고 (정답 코드 또한 매우 깔끔) set 함수도 추가로 자세히 학습해봤다. 비슷한 류의 문제를 풀 때는 set 함수를 잊지말고 써봐야겠다.