프로그래머스 완주하지못한선수(Lv1)

김준오·2021년 2월 2일
0

알고리즘

목록 보기
5/91
post-thumbnail

문제

https://programmers.co.kr/learn/courses/30/lessons/42576?language=python3

내풀이

def solution(participant, completion):
    answer = ''
    d = {}
    for i in completion:
        if i not in d:
            d[i] = 1
        else:
            d[i] += 1
        
    for i in participant:
        if i not in d or d[i] == 0:
            answer = i
            break
        
        else:
            d[i] -= 1
        
    
    return answer

리스트로 돌리면서 비교하면 갯수가 10만이기때문에 시간복잡도가 오바될것같아
hash로 구현했다.

완주자 리스트를 먼저 만들어둔후, 참가자 리스트를 for문 돌리며 만들어진 리스트에서 하나씩 빼준다. 만약 빼려는 참가자가 완주자리스트에 존재하지않을경우 해당 참가자가 범인이다!

동명이인이 있을수있기에 완주자리스트도 이름별로 숫자를 쌓는식으로 만들었다.

다른풀이

def solution(participant,completion):

    participant.sort()
    completion.sort()

    for par, com in zip(participant, completion) :
        if par != com :
            return par   

    return s[-1]         

새로 공부한것

ZIP

다른풀이를 보다가 zip이라는걸 처음 봤다

>>> list(zip([1, 2, 3], [4, 5, 6]))
[(1, 4), (2, 5), (3, 6)]
>>> list(zip([1, 2, 3], [4, 5, 6], [7, 8, 9]))
[(1, 4, 7), (2, 5, 8), (3, 6, 9)]
>>> list(zip("abc", "def"))
[('a', 'd'), ('b', 'e'), ('c', 'f')]

요런식으로 쓴다.

ex1)
print(list(zip([1,2,3,4], [10,20,30])))   

----->[(1, 10), (2, 20), (3, 30)]

ex2)
a = [1,2,3,4]
b = [10,20,30]

for p,q in zip(a,b):
  print(p,q)
  
----->
1 10
2 20
3 30

두 리스트의 갯수가 다를경우 짧은것 기준으로 맞춰지고 짝을 이룰수 없는 나머지는 아무일도 안생긴다.

다른풀이는 이걸 이용했다.

시간비교

호기심에 시간비교 한번 해봤다

solution1 이 내 풀이
solution2 가 같이올린 다른풀이이다.

테스트케이스를 긴걸로 하고싶어서 프로그래머스에서 예시로 준거중 제일 긴거로 했는데 그래봤자 5개밖에 안되서.. 더 길어지면 어떻게 바뀔지 모르겠지만

일단 다른풀이가 조금더 빠른것같다!..

profile
jooooon

0개의 댓글

관련 채용 정보