이 험난한 세상에서어어~

백준(20291), 파일 정리 python 본문

algorithm/코딩 테스트

백준(20291), 파일 정리 python

토끼띠NJW 2023. 5. 22. 11:37

문제 설명

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

 

20291번: 파일 정리

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

www.acmicpc.net

 

'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