개발 공부용

[백준] 20291 - 파일 정리 본문

코딩 테스트/99클럽 TIL

[백준] 20291 - 파일 정리

솝제로 2025. 2. 18. 08:49

 

문제 출처: 

 

문제
파일을 확장자 별로 정리해서 몇 개씩 있는지 알려줘.
확장자들을 사전 순으로 정렬해줘.

 

 

입력
  • 첫 번째 줄에 바탕화면에 있는 파일의 개수 N이 주어진다. (1<=N<=50,000)
  • 둘째 줄부터 N개의 줄에 바탕화면에 있는 파일의 이름이 주어진다.
  • 파일의 이름은 알파벳 소문자와 점으로만 구성되어 있다.
  • 점은 정확히 한 번 등장하며 파일 이름의 첫 글자 또는 마지막 글자로 오지 않는다.
  • 3<=각 파일의 이름의 길이<=100

 

출력
  • 확장자의 이름과 확장자 파일의 개수를 한 줄에 하나씩 출력한다.
  • 확장자가 여러 개 있는 경우 확장자의 이름의 사전순으로 출력한다.

 

문제 풀이 방법
  1. N을 저장한다.
  2. for문을 N번 돌면서 파일의 이름을 읽는다.
  3. 이 때 점 이전의 글자와 이후의 글자를 각각 나누어 다른 변수에 저장한다.
  4. 점 이후의 글자(확장자)를 딕셔너리의 key로 사용하고 해당 확장자를 가진 파일의 개수를 value에 저장한다.
  5. 파일 확장자 리스트에도 확장자를 저장해준다.
  6. sort()를 사용하여 파일 확장자 리스트를 정렬하고 사전순으로 출력한다.

 

작성한 코드
import sys

N = int(sys.stdin.readline().strip()) #1

file_list = {}
file_extension = []

for _ in range(N): #2
    name, extension = sys.stdin.readline().strip().split(".") #3

    if extension not in file_list.keys(): #4
        file_list[extension] = 0
        file_list[extension]+=1
        file_extension.append(extension) #5
    else:
        file_list[extension]+=1

file_extension.sort() #6

for extension in file_extension:
    print(extension, str(file_list[extension]))

 

다른 풀이
import sys

N = int(sys.stdin.readline().strip())

file_list = {}

for _ in range(N): 
    name, extension = sys.stdin.readline().strip().split(".")
    file_list[extension] = file_list.get(extension, 0)+1


for extension in sorted(file_list.keys()):
    print(extension, str(file_list[extension]))
    
#참고한 글
#https://velog.io/@almighty5/TIL99%ED%81%B4%EB%9F%BD-%EC%BD%94%ED%85%8C-%EC%8A%A4%ED%84%B0%EB%94%94-20%EC%9D%BC%EC%B0%A8-%EB%B0%B1%EC%A4%80-28107%EB%B2%88Python-9008359r

 

get을 사용해서 코드를 꽤나 줄일 수 있었던 게 인상적이었다!

코테는 다른 사람 풀이를 많이 봐야 느는 것 같다.

 

'코딩 테스트 > 99클럽 TIL' 카테고리의 다른 글

[백준] 1524 - 세준세비  (0) 2025.02.19
[백준] 18870 - 좌표 압축  (0) 2025.02.18
[백준] 28107 - 회전초밥  (0) 2025.02.15
[백준] 14235 - 크리스마스 선물  (0) 2025.02.13
[Leetcode] 506. Relative Ranks  (0) 2025.02.12