sugenius
[프로그래머스/코딩테스트 고득점 Kit/Python] 해시 본문
https://school.programmers.co.kr/learn/challenges?tab=algorithm_practice_kit
<해시>
Q.완주하지 못한 선수 #***
def solution(participant, completion):
answer = ''
'''
#틀림. 효율성 테스트 모두 실패
for c in completion :
participant.remove(c)
answer=participant[0]
'''
tmp=dict()
for p in participant :
tmp[p]=tmp.get(p,0) +1
for c in completion :
tmp[c]=tmp[c]-1
for t in tmp.keys() :
if tmp[t] > 0 :
answer=t
break
return answer
'''
import collections
def solution(participant, completion):
answer = collections.Counter(participant) - collections.Counter(completion)
return list(answer.keys())[0]
'''
'''
participant.sort()
completion.sort()
for i in range(len(completion)):
if participant[i] != completion[i]:
return participant[i]
return participant[len(participant)-1]
'''
Q.폰켓몬
def solution(nums):
answer = 0
cnt=len(nums)
nums=set(nums)
if len(nums) > cnt/2 :
answer = cnt/2
else :
answer=len(nums)
return answer
#return min(len(ls)/2, len(set(ls)))
Q.전화번호 목록 #***
def solution(phone_book):
'''
#틀림 ㅠ
answer = True
x = min(phone_book)
for p in phone_book :
if x in p and p!=x:
answer=False
break
'''
answer=True
phone_book = sorted(phone_book)
for p1, p2 in zip(phone_book, phone_book[1:]):
if p2.startswith(p1):
answer=False
break
return answer
Q.의상 #***
'''
A 종류 N개,B 종류 M개 일 때 가능한 모든 경우의 수는 (N+1)(M+1)
(N+1)(M+1) = NM + N + M + 1
NM: N과 M을 모두 사용하는 경우
N: N만 사용하는 경우
M: M만 사용하는 경우
1: 모두 사용하지 않는 경우
따라서, 결괏값 리턴시 -1을 통해 아무것도 입지 않는 경우를 제외하여
최소 1개 이상의 의상을 입는 경우의 수만 리턴할 수 있도록 함
(출처 구글링)
'''
def solution(clothes):
answer = 0
tmp=dict()
for c in clothes :
type=c[1]
tmp[type] = tmp.get(type,0) + 1
answer=1
for type,cnt in tmp.items() :
answer*=(cnt+1)
answer-=1
return answer
Q.베스트 앨범 #***
def solution(genres, plays):
answer = []
dic1={}
dic2={}
for i , (g,p) in enumerate(zip(genres, plays)) : #dic1 : 장르 인덱스 , 값 정리 (리스트로 저장)
#print(i,g,p)
if g not in dic1 :
dic1[g] = [(i,p)]
else :
dic1[g].append((i,p))
#print(dic1) #{'classic': [(0, 500), (2, 150), (3, 800)], 'pop': [(1, 600), (4, 2500)]}
if g not in dic2 : #dic2 : 장르별 합계
dic2[g] = p
else :
dic2[g] += p
#print(dic2) #{'classic': 1450, 'pop': 3100}
for (k,v) in sorted(dic2.items(), key=lambda x:x[1], reverse=True) : #같은 장르 내에서는 최대 2곡까지
for (i,p) in sorted(dic1[k], key=lambda x:x[1], reverse=True)[:2]:
answer.append(i)
return answer
'PROGRAMMERS > Coding Test, Python' 카테고리의 다른 글
[프로그래머스/코딩테스트 고득점 Kit/Python] 힙(Heap) (0) | 2023.12.06 |
---|---|
[프로그래머스/코딩테스트 고득점 Kit/Python] 스택/큐 (0) | 2023.12.06 |
[프로그래머스/Lv.0/Python] 코딩테스트 입문문제 (0) | 2023.11.14 |
[프로그래머스/Lv.0/Python] 코딩테스트 기초문제 (0) | 2023.11.06 |