본문 바로가기
Coding Test/Codility

[ Codility 코딜리티 ] Lesson 3 PermMissingElem Python 파이썬 풀이

by SteadyForDeep 2021. 4. 17.
반응형

 

 

// 문제 요약

 

N개의 서로 다른 정수들로 구성된 배열 A가 주어진다.

배열에 들어있는 정수들은 [1, (N+1)]의 범위를 가지며

정확히 하나의 원소가 사라져있다.

 

사라진 원소를 찾는 함수를 구현해라.

 

 

 

// 풀이

 

이 문제는 collections페키지에 있는

Counter()를 알면 쉽게 풀리고

모르면 생각을 좀 해야할 수도 있는 문제다.

 

각 플랫폼마다 다르긴 하지만

코딜리티의 경우는 collections를 지원하고 있다.

 

따라서 이러한 점을 미리 파악하고

시험에 임하는 것이 더 많은 무기를 가지고

전장에 임하는 것과 같다.

 

Counter()는 리스트를 입력받아서

element : the number of element 의

맵핑을 가지는 딕셔너리로 반환해준다.

 

 

 

코드를 보자.

# you can write to stdout for debugging purposes, e.g.
# print("this is a debug message")
import collections

def solution(A):
    # write your code in Python 3.6
    if not A:
        return 1

    doubled = A + [n for n in range(1, len(A)+1 +1)]

    counted = collections.Counter(doubled)
    for key, val in counted.items():
        if val == 1:
            return key

나의 우선 list comprehension을 통해서

원래 범위에서 아무것도 사라지지 않은

꽉찬 범위의 리스트를 만들고

그 리스트를 주어진 A와 합치는 작업을 했다.

 

그 이유는 주어진 A에 있는 원소라면

doubled에서는 반드시 2번 나타날 것이고

그렇지않다면 1번 나타날 것이기 때문이다.

 

따라서 이렇게 합쳐진 doubled를

Counter()에 넣어주고

counted의 key와 value를 동시에 뽑으면서

value의 값이 1이면 key를 반환하도록 하였다.

 

 

 

 

제출하기 전에 한번 더 점검을 해보면

N이 0부터 시작한다고 나와있다.

그러면 주어진 범위는 [1,1] 이 되고

원소가 하나도 없으니

사라진 원소는 1이 된다.

이 경우 아래의 모든 연산을 굳이 수행할 필요가 없으므로

예외 처리가 될 수 있게

연산보다 앞서서 if 문으로 걸러주었다.

 

 

 

 

반응형

댓글