전화번호 목록
접근 방법
1.
전화번호 목록을 정렬함
2.
현재 인덱스의 값과 다음 인덱스의 값을 비교
a.
현재인덱스의 값이 다음 인덱스의 값에 포함된다면 false
b.
for문을 전부 다 돌았을 때, 포함되어있지 않으면 true
3.
효율성 고려
a.
같은 전화번호가 중복해서 들어있지 않습니다.
→ if len(phone_book[i]) < len(phone_book[i+1]):
b.
접두어는 앞 길이의 길이만큼만 일치하면 된다.
→ if phone_book[i] == phone_book[i+1][0:len(phone_book[i])]:
def solution(phone_book):
# 접두어가 있으면 false, 그렇지 않으면 true
phone_book.sort()
if len(phone_book) == 1:
return True
for i in range(len(phone_book)-1):
if len(phone_book[i]) < len(phone_book[i+1]):
if phone_book[i] == phone_book[i+1][0:len(phone_book[i])]:
return False
return True
Python
복사
위장
접근방법
1.
dict = {종류 : 개수}
2.
개수가 0인 것을 포함해서 경우의 수를 계산
→for type in dict:
answer *= (dict[type]+1)
3.
스파이는 하루에 최소 한 개의 의상은 입습니다. = 마지막에 아무것도 입지 않은 것 제외
→ return answer - 1
def solution(clothes):
answer = 0
dict = {}
# key:종류 value:개수
for cloth, type in clothes:
dict[type] = dict.get(type, 0) +1
# print(dict)
answer = 1
# 입지 않은 것도 고려
for type in dict:
answer *= (dict[type]+1)
# 아무것도 입지 않은 것은 제외
return answer -1
Python
복사
딕셔너리 안에 찾으려는 Key 값이 없을 경우 미리 정해 둔 디폴트 값을 대신 가져오게 하고 싶을 때에는 get(x, '디폴트 값')을 사용하면 된다!!
베스트앨범
접근방법
1.
두 개의 해시만들기
a.
total_dict = {장르 : 총 플레이 횟수}
b.
per_dict = {장르 : [플레이횟수, 인덱스]}
2.
total_dict 딕셔너리를 총 플레이 횟수 기준으로 내림차순 정렬
a.
딕셔너리의 value값을 정렬하기 위해 items() 메서드를 사용함. items()메서드를 활용하면 배열 안의 튜플형태로 바뀜
—> per_dict:{'classic': [(500, 0), (150, 2), (800, 3)], 'pop': [(600, 1), (2500, 4)]}
3.
per_dict 딕셔너리를 플레이 횟수 기준으로 내림차순 정렬
def solution(genres, plays):
answer = []
total_dict = {} # 장르마다 플레이 수
per_dict = {} # 장르 안의 각 노래마다 플레이 수
# 딕셔너리 안에 찾으려는 Key 값이 없을 경우 미리 정해 둔 디폴트 값을 대신 가져오게 하고 싶을 때에는 get(x, '디폴트 값')을 사용하면 된다!!
for i in range(len(genres)):
total_dict[genres[i]] = total_dict.get(genres[i], 0) + plays[i]
per_dict[genres[i]] = per_dict.get(genres[i], []) + [(plays[i], i)]
# print(f"total_dict:{total_dict}")
# print(f"per_dict:{per_dict}")
# 총 재생횟수 내림차순 정렬
total_sort = sorted(total_dict.items(), key= lambda x:x[1], reverse=True)
# print(total_sort)
# 장르마다 노래플레이 수 내림차순 정렬
for genre in per_dict:
# print(per_dict[genre])
per_dict[genre] = sorted(per_dict[genre], key= lambda x: (-x[0]))
# answes 배열에 장르별 노래재생횟수 넣기
for (genre, totalPlay) in total_sort:
print(per_dict[genre])
for (plays, idx) in per_dict[genre][:2]:
answer.append(idx)
return answer
genres = ["classic", "pop", "classic", "classic", "pop"]
plays = [500, 600, 150, 800, 2500]
print(solution(genres, plays))
Python
복사
total_dict:{'classic': 1450, 'pop': 3100}
per_dict:{'classic': [(500, 0), (150, 2), (800, 3)], 'pop': [(600, 1), (2500, 4)]}
total_sort:[('pop', 3100), ('classic', 1450)]