[Level 1] 폰켓몬
def solution(nums):
answer = 0
# 폰켓몬 종류 개수
num = len(list(set(nums)))
# 뽑아야 하는 폰켓몬 개수
num_pick = int(len(nums)/2)
# 폰켓몬 종류가 뽑아야 하는 폰켓몬 개수 보다 많으면 그냥 폰켓몬 종류 개수
# 왜냐하면, 우리는 가장 많은 종류의 폰켓몬을 선택하는 방법을 찾아서 폰켓몬 종류 번호의 개수를 찾는 것
# 쉽게 말하면, 2개 뽑는데 1, 2, 3이라는 종류가 있다면 어떤 조합을 해도 1, 2 / 2, 3처럼 최대 종류 개수가 2개임
if num > num_pick: answer = num_pick
elif num == num_pick: answer = num_pick
# 그런데 3개 뽑는데 종류가 2개야. 그러면 어쨋든 최대로 조합될 수 있는 최대 종류 개수는 강제로 2개가 되는거지
else:
answer = num
return answer
[Level 1] 완주하지 못한 선수
remove 함수는 리스트 일부 값을 지워주는 것 (remove 안에 값을 정확히 넣어주어야 함)
주의해야 할 점은 해당 값과 똑같은 가장 첫 번째 값만 지워준다는 것!
초기 코드는 아래와 같다.
def solution(participant, completion):
answer = ''
for i in range(len(participant)-1):
# 완주한 사람 (completion에서 값 제거) -> 동명이인 처리
if participant[i] in completion:
completion.remove(participant[i])
# 완주하지 못한 사람
else:
answer = participant[i]
return answer
그런데 효율성 오류가 났음. 수정!
def solution(participant, completion):
answer = ''
# 효율성 테스트로 인해 sort 후 진행
participant.sort()
completion.sort()
for i in range(len(participant)-1): # completion이 값이 하나 적으니까
if participant[i] != completion[i]:
answer = participant[i]
return answer # 어차피 완주 못 한 사람은 1명이니까 return 해도 됨
# 마지막에 완주하지 못한 사람이 있을 경우 -1 인덱스로 return
answer = participant[-1]
return answer
[Level 2] 전화번호 목록
초기 코드는 아래와 같다.
def solution(phone_book):
# 정렬 후 진행 (시간 단축을 위해)
phone_book.sort()
for i in range(len(phone_book)):
for j in range(1, len(phone_book)):
# 문자열 길이가 같거나 더 짧으면 pass
if len(phone_book[i]) < len(phone_book[j]):
# 접두어가 같으면 answer 값 변경 후 break
if phone_book[i] == phone_book[j][:len(phone_book[i])]:
return False
return True
효율성 테스트 3번, 4번을 통과하지 못했다. 수정한 코드는 다음과 같다. (for 반복문을 줄임)
def solution(phone_book):
phone_book.sort()
for i in range(len(phone_book)-1):
if phone_book[i] == phone_book[i+1][:len(phone_book[i])]:
return False
return True
참고한 해시 함수의 정석적인 코드는 아래와 같다.
def solution(phone_book):
# 1.Hash map생성
hash_map = {}
for nums in phone_book:
hash_map[nums] = 1
# 2.접두어가 Hash map에 존재하는지 찾기
for nums in phone_book:
arr = ""
for num in nums:
arr += num
# 3. 본인 자체일 경우는 제외
if arr in hash_map and arr != nums:
return False
return True
[Level 2] 의상
못 풀어서 아래 참고 링크로 달아둔 분의 코드를 참고했다.
def solution(clothes):
# 각 종류별 가진 의상을 저장 (종류:[이름, 이름, ...])
closet = {}
for name, kind in clothes:
if kind in closet.keys():
closet[kind] += [name]
else:
closet[kind] = [name]
# A의 종류가 N개, B의 종류가 M개 일 때 가능한 모든 경우의 수 (N+1)(M+1)
answer = 1
for _, value in closet.items():
answer *= (len(value) + 1)
return answer -1
프로그래머스 | 의상 [파이썬 python]
프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 코드 def
dduniverse.tistory.com
[Level 3] 베스트 앨범
ing
'Coding Test > Programmers' 카테고리의 다른 글
[Python] 프로그래머스 알고리즘 고득점 Kit ✅ 탐욕법 (Greedy) (~ing) (0) | 2025.02.20 |
---|---|
[Python] 프로그래머스 알고리즘 고득점 Kit ✅ 정렬 (0) | 2024.09.29 |
[MySQL] 프로그래머스 Level 4, 5 문제 풀이 (20문제, 240715 업데이트) (3) | 2024.07.15 |
[MySQL] 프로그래머스 Level 3 문제 풀이 (21문제, 240612 업데이트) (1) | 2024.06.12 |
[MySQL] 프로그래머스 Level 2 문제 풀이 (36문제, 240530 업데이트) (1) | 2024.05.30 |