-
[파이썬][프로그래머스]완주하지 못한 선수코딩공부/프로그래머스 2020. 7. 29. 13:22
https://programmers.co.kr/learn/courses/30/lessons/42576?language=python3
코딩테스트 연습 - 완주하지 못한 선수
수많은 마라톤 선수들이 마라톤에 참여하였습니다. 단 한 명의 선수를 제외하고는 모든 선수가 마라톤을 완주하였습니다. 마라톤에 참여한 선수들의 이름이 담긴 배열 participant와 완주한 선수��
programmers.co.kr
완주하지못한선수우우우
문제설명)
n명의 마라톤 참가자 배열이 participant 에 주어진다.
n-1명의 마라톤 완주자 배열 completion 이 주어진다.
아니! 그러면 1명이 완주를 못했네 ? 바로 그사람을 찾는거다
여기서 더 생각해봐야 할 것이 있다.
만약 참가자의 이름이 각각 다르면 완주하지 못한사람을 찾기는 어렵지 않다.
근데 ! 근데근데 !
만약 동명이인이 있다면? 좀 더 생각해봐야할것이 생긴다.
동명이인이 있을 경우.
1. 동명이인 중 둘다 완주를 했을 때
2. 동명이인 중 한명이 완주를 못했을 때
1번케이스도 찾는게 어렵지않다.
2번이 문제다 !
처음에는 배열을 각각 정렬하여 for문을 돌려 비교를 하려했다.
근데 그렇게하니 시간초과가 떴다.
왜냐하면 위의 문제를 보면 제한사항에서 10만명의 참가자가 있을 경우도 있기 때문이다
배열 10만개정도를 서로 비교하려면 for문은 턱없이 부족하다.
그래서 여기서는 Counter 라는 배열로 효율적인 코드를 짤 수 있다.
from collections import Counter def solution(participant, completion): participant=Counter(participant) completion =Counter(completion) result = participant - completion return list(result.keys())[0]
Counter 을 사용하면 원소를 key로 하여 각각 나온 단어의 수를 value로 지정할 수 있다.
동명이인이 있다면 participant에 동명이인의 이름의 value는 2가 될 것이다.
completeion도 마찬가지로 설정해준다.
그다음 그 둘의 결과를 빼면 ! 다 빠지고 완주하지못한선수만 남는것이다
완주하지못한 선수가 1명이니까 result 안에는 1개의 원소밖에 없을것이다
그러면 그 카운터의 키를 리스트로 바꿔서 리턴하면 끝 !
이렇게 효율적으로 코드를 짤 수 있는걸 보아하니 많은 모듈이나 메소드를 익혀야겠다는 생각이 들었다.
'코딩공부 > 프로그래머스' 카테고리의 다른 글
[파이썬][프로그래머스]문자열 다루기 기본 (0) 2020.07.29 [파이썬][프로그래머스]2016년 (0) 2020.07.29 [파이썬][프로그래머스]문자열 내 p와 y의 개수 (0) 2020.07.29 [파이썬][프로그래머스]두 정수 사이의 합 (0) 2020.07.29 [파이썬][프로그래머스]수박수박수박수박수박수? (0) 2020.07.29