https://github.com/sdoram/Algorithm
https://github.com/sdoram/algorithm_solving_process
1. 백준 알고리즘 - 단어정렬
문제점
시도해 본 것들
예시 dict 만들기 & 람다 사용하기
word_dict = {
'but': 3,
'i': 1,
'wont': 4,
'hesitate': 8,
'no': 2,
'more': 4,
'no': 2,
'more': 4,
'it': 2,
'cannot': 6,
'wait': 4,
'im': 2,
'yours': 5,
}
sorted_word_dict = sorted(word_dict.items(), key=lambda value: value[1])
print(sorted_word_dict)
lambda 식을 통해서 value를 기준으로 sorted 하기
예시 dict 바꿔보기
word_dict = {
3: ['but'],
1: ['i'],
8: ['hesitate'],
2: ['no', 'it', 'im', 'no'],
4: ['more', 'wait', 'more', 'wont'],
6: ['cannot'],
5: ['yours'],
}
key = len(word), value = word로 가지는 dict로 변경
2중 for문으로 value에 접근하기
for word_len in sorted(word_dict):
for word in word_dict[word_len]:
print(word)
이 코드를 통해서 모든 value를 순회
사전순 정렬 & 중복 단어 제거
for num in sorted(word_dict):
for word in sorted(set(word_dict[num])):
print(word)
set()으로 중복 단어 제거 후 sorted로 정렬
입력으로 dict 만들기
word_dict = {}
# 테스트 케이스만큼 입력 받기
for _ in range(int(input())):
word = input()
# key가 문자열의 길이 value가 단어로 딕셔너리 넣기
if len(word) not in word_dict:
word_dict[len(word)] = [word]
else:
word_dict[len(word)] += [word]
자주 애용하는 딕셔너리 활용으로 key가 없으면 만들고, 존재하면 value를 추가하는 방식으로 구현
TIL 작성 중 word를 key로 받은 경우 리팩토링
word_dict = {
'but': 3,
'i': 1,
'wont': 4,
'hesitate': 8,
'no': 2,
'more': 4,
'it': 2,
'cannot': 6,
'wait': 4,
'im': 2,
'yours': 5
}
word_dict = {}
# 테스트 케이스만큼 입력 받기
for _ in range(int(input())):
word = input()
# key가 문자, value가 단어의 길이로 딕셔너리 넣기
# 중복인 경우 겹치므로 중복 제거 필요 X
word_dict[word] = [len(word)]
# word를 사전순으로 먼저 정렬
word_dict = sorted(word_dict.items())
# 길이를 기준으로 재정렬
word_dict = sorted(word_dict, key=lambda value: value[1])
for word in word_dict:
print(word[0])
다시 정렬할 때 기준이 같으면 기존의 정렬된 순서와 같은 것을 이용한 풀이방법이다. 이 방법보다 첫 번째 방식이 시간과 메모리 모두 좋은 결과를 보이고 있어서 그리 좋은 코드는 아닌 듯싶지만, dict의 key를 받는 방식이 문제가 아니었던 것을 알 수 있다.
해결 방법
길이를 key로 사용
word_dict = {}
# 테스트 케이스만큼 입력 받기
for _ in range(int(input())):
word = input()
# key가 문자열의 길이, value가 단어로 딕셔너리 넣기
if len(word) not in word_dict:
word_dict[len(word)] = [word]
else:
word_dict[len(word)] += [word]
# key를 기준으로 정렬
for num in sorted(word_dict):
# 밸류 set으로 중복 제거, sorted로 사전순 정렬
for word in sorted(set(word_dict[num])):
print(word)
단어를 key로 사용
word_dict = {}
# 테스트 케이스만큼 입력 받기
for _ in range(int(input())):
word = input()
# key가 문자, value가 단어의 길이로 딕셔너리 넣기
# 중복인 경우 겹치므로 중복 제거 필요 X
word_dict[word] = [len(word)]
# word를 사전순으로 먼저 정렬
word_dict = sorted(word_dict.items())
# 길이를 기준으로 재정렬
word_dict = sorted(word_dict, key=lambda value: value[1])
for word in word_dict:
print(word[0])
알게 된 점
예시가 주어지고 결과가 보이는 프로그래머스에서 사용하다가 제출 전 직접 만들어서 테스트해야하는 백준에서 내가 사용하고자 하는 형태의 딕셔너리를 만드는데 시간이 걸렸다.
dict가 담을 수 있는 정보량이 많아서 그런지 같은 결과를 도출하는 다양한 방법이 존재하는 것 같다.
분수의 덧셈에서 한 번 꺾였지만, 드디어 코딩 테스트에 입문했다.
'개발일지 > TIL' 카테고리의 다른 글
TIL 23-05-07 유클리드 호제법 (1) | 2023.05.07 |
---|---|
TIL 23-05-06 백준 알고리즘 - 세준세비 (0) | 2023.05.06 |
TIL 23-05-04 팀원과의 코드 리뷰 - ad 제거하기 (1) | 2023.05.04 |
TIL 23-05-03 팀원과의 코드 리뷰 - 전국 대회 선발 고사 (0) | 2023.05.03 |
TIL 23-05-02 페어프로그래밍 - OX 퀴즈 (1) | 2023.05.02 |