일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- gold2
- spring
- jpa
- Kakao
- LEVEL2
- error
- LCS
- CSS
- 백엔드
- siver3
- glod5
- 9252
- HTML
- 개념
- 구현
- glod4
- leetcode 69
- 오류
- leetcode
- mysql
- 프로그래머스
- Thymeleaf
- LEVEL1
- Gold4
- AWS
- 배포
- gold5
- 백준
- java
- PYTHON
- Today
- Total
이 험난한 세상에서어어~
백준(20291), 파일 정리 python 본문
문제 설명
n개의 파일 이름이 주어지는데, 각 확장자 명으로 파일이 몇 개나 있는지 출력하는 문제다. 만일 여러 개의 파일 확장자가 있으면 이때는 파일 확장자를 사전 순으로 정렬해서 출력한다.
문제 풀이
첫 번째 접근
일단 dic를 사용해서 각 확장자 별로 파일이 몇 개 있는지 확인을 해줘야 했다고 생각했다. 그리고 파일 확장자 명은 list나 set에 넣어서 정렬을 한 후 정렬한 확장자 별로 파일 수를 dic에서 빼면 된다고 생각했다.
아마 java로 문제를 오래 풀어서 그런 거 같은데, 파이썬 dic 정렬을 찾아보니 이것보다 더 쉬운 방법이 있어서 해당 방법으로 풀었다.
두 번째 접근
Python에서 dic를 정렬할 때는 굳이 key 값을 따로 set으로 만들어서 정렬할 필요 없이 items 함수를 이용하면 된다.
dic이름.items()
이렇게 하면 각 dic의 key와 value가 튜플로 이루어진 리스트로 반환이 된다. 때문에 이를 정렬하고 싶다면, 간단하게 sorted를 사용해 주면 된다. 이때 sort와 sorted의 차이점을 알아가면 좋은데, sort의 경우에는 정렬하고 싶은 리스트의 값 자체를 바꿔주는 것이고 sorted는 리스트 원본을 놔둔 채로 정렬을 해서 새로운 값을 반환하는 것이다.
즉, sort를 쓰면 원본 값이 바뀌고 sorted를 쓰면 정렬된 값이 반환되고 원본 값은 유지가 된다.
또 다른 차이점은 sort의 경우 리스트의 메소드이며 sorted의 경우에는 내장 함수라는 것이다.
아무튼 다시 문제로 돌아가면, 각 파일 명을 split(".")을 이용해서 '.'을 기준으로 자른 후 dic에 있다면 값을 갱신하고 없다면 새로 value를 1로 해서 넣어준다. 그리고 위에서 설명했던 대로 sorted를 한 다음 dic를 출력하면 된다.
코드
Python
import sys
n = int(sys.stdin.readline().rstrip())
files = set()
count = {}
for i in range(n):
tmp = list(sys.stdin.readline().rstrip().split("."))
files.add(tmp[1])
if tmp[1] in count:
count[tmp[1]] = count[tmp[1]] + 1
else:
count[tmp[1]] = 1
sortedKey = sorted(count.items())
for s in sortedKey:
print(s[0], s[1])
링크
https://www.acmicpc.net/problem/20291
'algorithm > 코딩 테스트' 카테고리의 다른 글
배열 돌리기 3 (0) | 2023.06.01 |
---|---|
아기 상어(백준 16236, python) (0) | 2023.05.29 |
배열 돌리기 (0) | 2023.05.28 |
문자열 압축(python), kakao (1) | 2023.05.13 |
무지의 먹방 라이브(python) (0) | 2023.05.12 |