일단 문제를 풀기 위한 나의 알고리즘은 이러했다.
1. N만큼 입력 받으면서 개행 문자를 떼어내고 점(.) 뒤를 확장자 배열에 저장하자
2. 확장자 배열을 sort하자 (사전순 출력)
3. collections 모듈의 Counter를 사용해서 각 요소의 개수를 세자
4. 각 요소와 개수를 출력하자
이게 완성된 코드
import sys
from collections import Counter
input = sys.stdin.readline
# 파일 개수 N
# N개 줄에 파일의 이름
ext = []
N = int(input())
for i in range(N):
file_ext = input().strip().split('.')[1]
ext.append(file_ext)
ext.sort()
cnt = Counter(ext)
for key, value in cnt.items():
print(key, value)
그런데 조금 막혔던 부분은 Counter에 저장한 뒤
이걸 대체 어떻게 요소 하나씩 출력하지? 였다.
import sys
from collections import Counter
input = sys.stdin.readline
# 파일 개수 N
# N개 줄에 파일의 이름
ext = []
N = int(input())
for i in range(N):
file_ext = input().strip().split('.')[1]
ext.append(file_ext)
ext.sort()
cnt = Counter(ext)
print(cnt)
이렇게 작성한 뒤 실행 해보니
Counter({'txt': 3, 'icpc': 2, 'spc': 2, 'world': 1})
요렇게 나왔기 때문이다.
여기서 배열처럼 인덱스를 주려 하니
정상적으로 실행하지 않았다.
그러다가 Counter는 딕셔너리 형태로 저장함을 알게 됐다.
확장자 이름과 개수를 딕셔너리의 key, value값으로 저장하고 있으므로
반복문을 사용하여 딕셔너리의 key, value 값을 출력했다.
for 키, 값 in 딕셔너리.items():
반복할 코드
cnt = Counter(ext)
for key, value in cnt.items():
print(key, value)
확장자 배열을 Counter를 사용하여 cnt에 딕셔너리 형태로 저장해주고,
cnt items의 key, value (이 문제에서는 각각 확장자 이름, 개수)를 반복문으로 출력해주었다.
문제 해결!
https://dojang.io/mod/page/view.php?id=2308
'Languages > Python' 카테고리의 다른 글
[Python] leetcode | 20. Valid Parentheses 괄호 짝 맞추기 | Stack (0) | 2024.05.26 |
---|---|
[Python] 프로그래머스 | 같은 숫자는 싫어 | append (0) | 2024.05.24 |
[Python] [백준 #1764] 두 개의 set(집합) 중복 요소 출력하기 (0) | 2024.05.10 |
[Python] 파이썬 sys.stdin.readline() 입력 받기 (0) | 2024.04.02 |
[Python] 파이썬의 나누기(몫/나머지) // 연산자와 % 연산자 (0) | 2023.04.10 |