공부용 블로그 | seokmin100

Nefus - Python [BOJ 20920, 10809] 본문

Nefus/Python

Nefus - Python [BOJ 20920, 10809]

seokmin100 2024. 8. 30. 00:48

BOJ 20920

https://www.acmicpc.net/problem/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

https://www.acmicpc.net/problem/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