level0_이어 붙인 수

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(...)은 이 리스트의 문자열들을 하나로 결합한다.

 

짝수와 홀수에 대해 각각 만들어진 문자열을 정수를 변환하고 두 정수를 더한다. 

 

 

 

 

댓글에 시간 복잡도에 대한 이야기를 했었는데

 

 

위 코드에 대한 시간 복잡도를 설명하자면 

  1. 리스트 컴프리헨션을 통한 필터링 및 문자열 변환
    1. str(x) for x in num_list if x % 2]와 [str(x) for x in num_list if not x % 2]는 각각 num_list를 한 번 순회하며, 각 원소에 대해 홀수인지 짝수인지를 판단한다.
    2. 이 과정은 리스트 전체를 순회하므로 시간 복잡도는 O(n)이다.
  2. 문자열 결합
    1. ''.join(...)은 리스트의 모든 문자열을 결합한다.
    2. 이 과정은 결합하는 문자열의 총 길이에 비례하므로, 최악의 경우 O(n)이다.
  3. 정수 변환
    1. int(...)는 문자열을 정수로 변환한다.
    2. 이 변환 과정은 문자열의 길이에 비례하므로 O(n)이다.
  4. 정수 덧셈
    1. 두 정수를 더하는 것은 상수 시간 작업이므로 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