종식당

[백준 20291] 파일 정리 본문

백준

[백준 20291] 파일 정리

종식당 2024. 2. 1. 17:59
728x90
반응형

 

https://www.acmicpc.net/problem/20291

 

20291번: 파일 정리

친구로부터 노트북을 중고로 산 스브러스는 노트북을 켜자마자 경악할 수밖에 없었다. 바탕화면에 온갖 파일들이 정리도 안 된 채 가득했기 때문이다. 그리고 화면의 구석에서 친구의 메시지를

www.acmicpc.net

 

  • 문제 설명

첫 번째 줄에 파일의 개수 N을 입력받고 입력받은 파일들의 확장자들을 개수와 함께 사전 순으로 정렬하여 출력한다.

 

문제를 처음 봤을 때 먼저 입력된 파일들을 뒤 3글자를 잘라야겠다고 생각했다. 문자열 파싱 [-3:]을 이용하여 잘라서 리스트에 저장하려고 접근했다. 자른 후 이들의 개수를 어떻게 세야 할지 고민하고 있었는데 Counter라이브러리가 생각나서 이를 활용하려고 했다. 다음은 처음에 제출한 코드이다.

from collections import Counter
import sys
input = sys.stdin.readline

N = int(input())
result = []
lst = [input() for i in range(N)]
for i in lst:
    result.append(i[-3:])

my_dict = dict(Counter(result))
list_my_dict = sorted(my_dict.items(), key=lambda x: x[0])
answer = dict(list_my_dict)
for key, value in answer.items():
    print(key, value, sep=" ")

 

리스트에 잘라서 저장하고 Counter를 이용해서 딕셔너리를 만들고 이들을 확장자의 사전 순으로 정렬한 후 딕셔너리.items()에서 key value를 출력해 주었다. 이렇게 하면 분명히 답이 나오긴 하는데 시간초과도 아니고 틀렸다는데 아직 반례를 찾지는 못했다.

 

  • 제출 코드
import sys
input = sys.stdin.readline

N = int(input())

lst = []
dict = {}

for i in range(N):
    k = input().rstrip().split(".")
    lst.append(k[1])

for i in lst:
    if dict.get(i):
        dict[i]+=1
    else:
        dict[i] = 1
result = sorted(dict.items())
for key,value in result:
    print(key,value)

 

파일들을 입력 받을 때 처음에 rstrip()을 안 해줘서 출력문이 이상하게 나왔다. sys.stdin.readline을 사용할 때는 rstrip()을 꼭 생각하면서 사용해야 할 것 같다. 그리고 굳이 "."을 기준으로 split 하지 않고 처음 제출한 코드처럼 문자열 파싱을 이용해서 리스트에 저장해도 될 것 같다.

 

이번 문제에서 중요하게 봐야할 것은 이 부분이다. 딕셔너리에서 요소를 얻고 싶을 때 사용하는 get() 함수이다.

이제 딕셔너리에 대해서는 부담 없이 사용할 수 있기는 한데 get()은 한번 짚고 넘어가야 할 것 같다.

확장자들을 저장한 리스트를 하나씩 접근하면서 이 확장자가 딕셔너리에 있다면 이를 1 증가시키고 딕셔너리에 없다면 1로 초기화시키는 코드이다. 이때 확장자는 딕셔너리에 key가 되고 개수가 딕셔너리의 value가 된다.

 

그리고 정렬하는 부분도 한번 짚고 넘어가야 한다. 위 코드를 보면 dict.items()를 정렬하는데 이때 딕셔너리의 키를 기준으로 정렬된다는 것을 알고 가면 좋을 것 같다. 

 

 

728x90
반응형

'백준' 카테고리의 다른 글

[백준 1929] 소수 만들기  (0) 2024.02.14
[백준 11053, 12015] 가장 긴 증가하는 부분 수열 1, 2  (2) 2024.02.08
[백준 1755] 숫자놀이  (3) 2024.01.31
[백준 10814] 나이 순 정렬  (2) 2024.01.31
[백준 2108] 통계학  (1) 2024.01.19