일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
31 |
- lateinit
- programmers # 프로그래머스 #큰수비교 #cmp_to_key()
- kotlin addview
- 코틀린
- 컬렉션함수
- 코틀린 제너릭
- kotlin listview
- 코틀린 data class
- 코틀린 컬렉션함수
- collection function
- 코틀린 lateinit
- 컬렉션 함수
- isNullOrBlank
- 코틀린 람다함수
- 객체의 동일성
- 코틀린 중첩클래스
- Kotlin
- 내용의동일성
- 해시
- kotlin recyclerview
- kakao blind
- class
- 프로그래머스 #탐욕법 #큰수만들기 #join #python
- 카카오 순위검색
- 프로그래머스
- 코틀린 문자열
- add view
- Kotlin Generic
- 코틀린 내부 클래스
- kotlin collection
- Today
- Total
엔지니어 규의 IT 프로그래밍 다이어리
프로그래머스 : 해시 - 완주하지 못한 선수 본문
문제 설명
수많은 마라톤 선수들이 마라톤에 참여하였습니다. 단 한 명의 선수를 제외하고는 모든 선수가 마라톤을 완주하였습니다.
마라톤에 참여한 선수들의 이름이 담긴 배열 participant와 완주한 선수들의 이름이 담긴 배열 completion이 주어질 때, 완주하지 못한 선수의 이름을 return 하도록 solution 함수를 작성해주세요.
제한사항- 마라톤 경기에 참여한 선수의 수는 1명 이상 100,000명 이하입니다.
- completion의 길이는 participant의 길이보다 1 작습니다.
- 참가자의 이름은 1개 이상 20개 이하의 알파벳 소문자로 이루어져 있습니다.
- 참가자 중에는 동명이인이 있을 수 있습니다.
participant | completion | return |
["leo", "kiki", "eden"] | ["eden", "kiki"] | "leo" |
["marina", "josipa", "nikola", "vinko", "filipa"] | ["josipa", "filipa", "marina", "nikola"] | "vinko" |
["mislav", "stanko", "mislav", "ana"] | ["stanko", "ana", "mislav"] | "mislav" |
풀이1
import collections
def solution(participant, completion):
answer = collections.Counter(participant) - collections.Counter(completion)
return list(answer.keys())[0]
|
cs |
1. collections.Counter 함수의 존재를 알아야 한다.
위처럼 list 내부의 원소의 개수를 count 해서 dict 형태로 변환해주는 사기적인 기능이다.
또한 이 객체들은 덧셈 뺄셈이 가능하다. 예를들면
a = ['a','a','a','b','b','c']
b = ['a','b','c','d','e']
collections.Counter(a) - collections.Counter(b)
Counter({'a': 2, 'b': 1})
c,d,e 는 a list 에 없기 때문에 있는 원소에 한해서만 뺄셈이 되어서 출력이 된다. 해당 pattern은 어느정도 외우도록 하자.
풀이2
def solution(participant, completion):
participant.sort()
completion.sort()
for p, c in zip(participant, completion):
if p != c:
return p
return participant[-1]
|
cs |
zip 기능을 이용 하였다.
여기서 참 재미있는것이 zip 은 list 의 배열이 서로달라도 짝짓기가 가능하다.
예를들면 a = [1,2,3,4,5], b= [1,2,3] 으로 배열의 길이가 달라도 zip(a,b) 가 가능하며,
짧은 배열을 기준으로 zip 된다.
풀이3
def solution(participant, completion):
answer = ''
temp = 0
dic = {}
for part in participant:
dic[hash(part)] = part
temp += int(hash(part))
for com in completion:
temp -= hash(com)
answer = dic[temp]
return answer
|
cs |
hash 함수에 대해서 알아야 하는 풀이이다.
우선 파이썬에서 hash('str') 을 사용하면 일정길이의 숫자가 return 된다.
예를들면
a = ['apple','bannana','hat','코드']
dic = {}
for i in a:
dic[hash(i)] = i
|
cs |
{3971016712440575100: 'apple',
-6506880872274404916: 'bannana',
-3415871753867651093: 'hat',
-3701313500097656757: '코드'}
dic 은 위처럼 출력이 된다.
'코딩테스트 > python' 카테고리의 다른 글
프로그래머스 : 스택/큐 - 올바른 괄호 (0) | 2023.01.20 |
---|---|
프로그래머스 : 해시 - 전화번호 목록 (0) | 2023.01.19 |
프로그래머스 : 완전탐색 - 소수찾기 (0) | 2023.01.19 |
프로그래머스 : 정렬 - 가장큰수 (0) | 2023.01.15 |
프로그래머스 : 탐욕법(Greedy) - 큰수만들기 (0) | 2023.01.14 |