매번 헷갈리고 알고리즘 문제 풀때마다 찾아보길래 이번 기회에 블로그에 적음으로 찾는 수고를 덜고자 한다.
프로그래머스에서 이번에 위클리 챌린지라고 leetcode에서 하는것 처럼 매주 문제 하나씩 내는데 4주차 문제에서 dictionary를 sort해야하는 문제가 나왔다.
- 3주차는 어려워서 건너뛰고 4주차 풀었다.
- 내가 생각하는 이 문제의 제일 중요한 부분은 dictionary 자료형의 sort 부분이다.
2번에 대해 자세히 서술해보면
구글에 "python dictionary sort" 를 검색했을때 가장 많이 나오는 답으로는 sort by value 다.
value값 크기 대소를 통해 sort 하는 방법이다.
# sort by value Ascending
result = sorted(dictionary.items(), key=lambda x : x[1])
# sort by value Descending
result = sorted(dictionary.items(), key=lambda x : x[1], reverse=True)
예제 하나만 보더라도 key 값으로 sort 할 경우 lambda 식에서 x[0] 으로 바꿔주면 되겠구나 하는 생각이 든다.
하지만, 이번 문제의 경우
value 값은 내림차순으로
value 값중 가장 큰 값이 중복일 경우, key 값이 오름차순으로 정렬해 보여주기를 요구한다.
구글에 검색하기를 python dictionary sort by user function or custom function 으로 쳐봤으나
결과로 나온것중에 (이번문제에) 적당한 답은 없었다.
조금 더 찾아보던중 이번 문제를 해결할 수 있었던 stack overflow의 답을 찾아냈다.
ref : https://stackoverflow.com/questions/15371691/how-to-sort-a-dictionary-by-value-desc-then-by-key-asc
python 문법은 진짜 날 잡고 한번 쭉 훑어볼 필요가 있지 싶다.
매번 dictionary sorting 할 때마다 구글 뒤지는건 아니다 싶어서 알고리즘 문제 풀이겸 정리 해본다.
해당 문제에 대한 링크
ref : https://programmers.co.kr/learn/courses/30/lessons/84325
해당 문제에 대한 내 풀이
def solution(table, languages, preference):
answer = ''
# table 구성
info_dic = dict()
for info in table:
info_list = info.split()
lang_dict = dict()
for i, lang in enumerate(info_list[1:len(info_list)]):
lang_dict[lang] = (len(info_list) - (i+1))
info_dic[info_list[0]] = lang_dict
# prefernce 구성
pre_dict = dict()
for lang, score in zip(languages, preference):
pre_dict[lang] = score
# 각 직업군 점수 계산
job_score = dict()
for job in info_dic:
sum_num = 0
for lang in pre_dict:
if lang in info_dic[job]:
sum_num += pre_dict[lang] * info_dic[job][lang]
else:
sum_num += 0
job_score[job] = sum_num
# dictionary sort
sort_list = sorted(job_score.items(), key=lambda x: (-x[1], x[0]))
answer = sort_list[0][0]
return answer
'text > Python' 카테고리의 다른 글
뉴스 문서 군집화 하기.ver2 ( document clustering using Minhash & LSH) (1) | 2021.10.15 |
---|---|
날짜 문자열 regex로 제거 정리글 (0) | 2021.09.07 |
뉴스 문서 군집화 하기 (document clustering with DBSCAN) (4) | 2021.04.28 |
문장 생성 해보기 with. mini-GPT (feat. 네이버 기사 댓글) (0) | 2021.04.21 |
문장 생성 해보기 (feat. 네이버 기사 댓글) (0) | 2021.04.02 |
댓글