공부용 블로그 | seokmin100
Nefus - Python [BOJ 20920, 10809] 본문
BOJ 20920
이 문제는 영단어를 입력 받고, 출력 값에 3가지 조건을 지켜서 출력하는 문제입니다. 이 문제는 도저히 모르겠어서 블로그를 참고해 코드를 작성하였습니다.
import sys
input = sys.stdin.readline
N, M = map(int, input().rstrip().split())
word_lst = {}
for _ in range(N):
word = input().rstrip()
if len(word) < M:
continue
else:
if word in word_lst:
word_lst[word] += 1
else:
word_lst[word] = 1
word_lst = sorted(word_lst.items(), key = lambda x : (-x[1], -len(x[0]), x[0]))
for i in word_lst:
print(i[0])
sys.stdin.readline으로 입력을 빠르게 불러옵니다. 그리고 딕셔너리 word_lst를 생성하여 빈도 수를 저장합니다. 이후 for문을 통해서 N개의 단어를 입력받아 처리합니다. 각 단어의 길이가 M보다 작으면 continue를 통해 무시합니다. 만약 M보다 길면 word_lst 딕셔너리에 추가하고, 이미 존재하면 빈도 수를 증가시킵니다. for문이 다 동작하면 단어를 정렬하게 됩니다. 마지막으로 정렬된 리스트를 돌면서 출력할 수 있게 코드를 작성하였습니다.
BOJ 10809
이 문제는 입력 받은 단어에서 알파벳이 처음 등장하는 위치를 출력하고, 포함되어 있지 않은 경우에는 -1을 출력하는 문제입니다. 이 문제의 풀이 방법은 많지만 딕셔너리를 이용하여 풀이하였습니다.
s = list(input())
c = 'abcdefghijklmnopqrstuvwxyz'
a = {}
index = 0
for i in s:
if i not in a:
a[i] = index
index += 1
for i in c:
if i in a:
print(a[i], end=' ')
else:
print(-1, end=' ')
s에 단어를 입력 받고, for문에서는 s를 돌면서 알파벳이 a안에 없으면 그 문자의 인덱스를 저장합니다. 마지막 출력 for문에서는 c를 돌면서 만약 c안에 a가 있다면 숫자를 출력하고 아니면 -1을 출력하게 해주었습니다.
baekjoon이라는 단어를 받으면 s에 ['b', 'a', 'e', 'k', 'j', 'o', 'o', 'n']이라는 리스트를 생성하고 for i in s를 돌면서 {'b' : 0, 'a' : 1, ...} 이런 식으로 저장 후 for i in c 문에서 출력할 수 있게 코드를 작성하였습니다.
'Nefus > Python' 카테고리의 다른 글
Nefus - Python [Codeup 1610, 1620, 수학문제] (0) | 2024.09.03 |
---|---|
Nefus - Python [Codeup 6067, 6068] (0) | 2024.08.23 |