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 함수를 추가적으로 학습해봤다.
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 함수를 잊지말고 써봐야겠다.
'Algorithm > Programmers' 카테고리의 다른 글
[programmers lv1.python] 달리기 경주 풀이 (시간초과 해결) (0) | 2024.11.05 |
---|---|
[programmers lv.1 python] '로또의 최저 순위와 최고 순위' 풀이 (0) | 2024.09.28 |
[programmers lv1. python] 서울에서 김서방 찾기 (초..간단하게 풀기) (4) | 2024.08.08 |
[programmers] 피자 나눠 먹기 (2) 파이썬 풀이 (1) | 2024.06.13 |
[programmers lv1.python] 기사단원의 무기 풀이 (0) | 2024.05.16 |