2024. 6. 19. 23:16ㆍ파이썬_알고리즘(코딩테스트)/level0

내가 제출한 코드
def solution(num_list):
a = "" # 짝수
b = "" # 홀수
for i in num_list:
if i % 2 == 0:
a += str(i)
else:
b += str(i)
return int(a) + int(b)
a는 짝수를 결합할 문자열, b는 홀수를 결합할 문자열이다.
i % 2 == 0이면 i는 짝수이다. 이 경우 a에 i를 문자열로 변환하여 추가한다.
그렇지 않으면 i는 홀수이다. 이 경우 b에 i를 문자열로 변환하여 추가한다.
짝수로 구성된 문자열 a와 홀수로 구성된 문자열 b를 정수로 변환한 후, 이 둘을 더한 값을 반환한다.
다른 사람이 제출한 코드
def solution(num_list):
return int(''.join([str(x) for x in num_list if x % 2])) + int(''.join([str(x) for x in num_list if not x % 2]))
리스트 내포와 문자열을 결합한 코드였다.
- ''.join([str(x) for x in num_list if x % 2])
- [str(x) for x in num_list if x % 2]는 num_list의 각 요소 x에 대해 x가 홀수인 경우 x를 문자열로 변환한 리스트를 만든다.
- ''.join(...)은 이 리스트의 문자열들을 하나로 결합한다.
짝수와 홀수에 대해 각각 만들어진 문자열을 정수를 변환하고 두 정수를 더한다.
댓글에 시간 복잡도에 대한 이야기를 했었는데

위 코드에 대한 시간 복잡도를 설명하자면
- 리스트 컴프리헨션을 통한 필터링 및 문자열 변환
- str(x) for x in num_list if x % 2]와 [str(x) for x in num_list if not x % 2]는 각각 num_list를 한 번 순회하며, 각 원소에 대해 홀수인지 짝수인지를 판단한다.
- 이 과정은 리스트 전체를 순회하므로 시간 복잡도는 O(n)이다.
- 문자열 결합
- ''.join(...)은 리스트의 모든 문자열을 결합한다.
- 이 과정은 결합하는 문자열의 총 길이에 비례하므로, 최악의 경우 O(n)이다.
- 정수 변환
- int(...)는 문자열을 정수로 변환한다.
- 이 변환 과정은 문자열의 길이에 비례하므로 O(n)이다.
- 정수 덧셈
- 두 정수를 더하는 것은 상수 시간 작업이므로 O(1)이다.
이 과정을 종합적으로 고려하면, 주어진 코드에서 두 번의 리스트 컴프리헨션과 문자열 결합, 정수 변환이 각각 순차적으로 수행되므로 전체 시간 복잡도는 O(n) + O(n) + O(n) + O(1) = O(n)이다.
따라서, 주어진 코드는 O(n) 시간 복잡도를 가지며, 시간 복잡도가 두 배로 증가하지는 않는다. 이는 각 단계가 독립적으로 O(n) 시간에 수행되기 때문이다.
'파이썬_알고리즘(코딩테스트) > level0' 카테고리의 다른 글
| level0_공배수 (0) | 2024.06.25 |
|---|---|
| level0_flag에 따라 다른 값 반환하기 (0) | 2024.06.22 |
| level0_마지막 두 원소 (0) | 2024.06.17 |
| level0_수 조작하기1 (1) | 2024.06.16 |
| level0_카운트 업 (0) | 2024.06.15 |