https://www.acmicpc.net/problem/20920
20920번: 영단어 암기는 괴로워
첫째 줄에는 영어 지문에 나오는 단어의 개수 $N$과 외울 단어의 길이 기준이 되는 $M$이 공백으로 구분되어 주어진다. ($1 \leq N \leq 100\,000$, $1 \leq M \leq 10$) 둘째 줄부터 $N+1$번째 줄까지 외울 단
www.acmicpc.net
내 코드
import sys
input = sys.stdin.readline
n, m = map(int, input().split())
memory = {}
for _ in range(n):
word = input().rstrip()
if len(word) < m :#길이 체크
continue
else:
if word in memory:
memory[word] +=1
else:
memory[word] =1
memory = sorted(memory.items(), key = lambda x: (-x[1], -len(x[0]), x[0]))
for key in memory:
print(key[0])
코드 리뷰
3가지의 조건을 지키라고 써져 있지만, 해당 문제의 조건은 4가지이다.
- 길이가 M이상인 단어들만 입력받는다.
- 자주 나오는 단어일수록 앞에 배치한다.
- 해당 단어의 길이가 길수록 앞에 배치한다.
- 알파벳 사전 순으로 앞에 있는 단어일수록 앞에 배치한다
문제를 보자마자 단어의 빈도수를 물어보길래, 바로 dictionary 를 이용해야겠다고 생각했다.
if len(word) < m :#길이 체크
continue
먼저 M 길이 이하의 단어라면 저장하지 않는다.
else:
if word in memory:
memory[word] +=1
else:
memory[word] =1
그리고 이미 저장되어 있는 단어라면 +1을 해주고, 저장되어 있지 않았다면 1이라고 초기값을 설정해준다.
여기서 나는 dict의 value 값을 int로 사용하려면 당연히 defaultdict(int)를 설정해야 한다고만 생각해왔다.
하지만 이렇게 value 초기값을 1로 설정해주면, 이후 int 연산을 할 수 있다는 것을 알게 되었다.
https://beehand.tistory.com/71
[Python] defaultdict 사용법
defaultdict dict의 서브 클래스이다. 기본값을 설정할 수 있도록 도와주는 함수이다. 여러가지의 기본값을 설정할 수 있도록 한다. from collections import defaultdict d = defaultdict(int) print(d) # d(, {}) d = default
beehand.tistory.com
defaultdict의 설명은 여기서 확인할 수 있다.
memory = sorted(memory.items(), key = lambda x: (-x[1], -len(x[0]), x[0]))
그리고 lambda 함수로 dictionary 를 다시 정렬해준다. lambda를 사용할 때는 우선순위대로 조건을 적으면 되고, x[0]이면 key값, x[1]이면 value 값을 기준으로 삼는다.
그리고 앞에 -를 붙여주면 내림차순으로 정렬된다.
단어의 길이를 기준으로 하고 싶다면 len(x[0]) 를 기준으로 정렬하면 된다.
https://beehand.tistory.com/35
[Python] 람다 표현식 사용하기
람다 표현식을 이용해서 함수 만들기 def add(x1): return x1 + 1 이게 기본적인 함수인데, 이 add라는 함수를 람다 표현식으로 다시 만들어볼 수 있다. lambda x1: x1 + 1 #람다 표현식 = 익명 함수 람다 표현
beehand.tistory.com
람다 표현식의 자세한 설명은 여기서 확인 가능하다.
'코딩테스트 대비 > 백준(BOJ)' 카테고리의 다른 글
| [Python][백준/BOJ] 5567번 : 결혼식 (0) | 2023.08.01 |
|---|---|
| [Python][백준/BOJ] 11724번 : 연결 요소의 개수 (0) | 2023.07.31 |
| [Python][백준/BOJ] 19941번 : 햄버거 분배 (0) | 2023.07.30 |
| [Python][백준/BOJ] 19637번 : IF문 좀 대신 써줘 (0) | 2023.07.30 |
| [Python][백준/BOJ] 5014번 : 스타트링크 (0) | 2023.07.30 |