백준 알고리즘

백준 - 20291번 파일 정리 python 문제풀이 [Hellfer]

Hellfer 2023. 12. 14. 21:36
728x90

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

 

20291번: 파일 정리

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

www.acmicpc.net

🔷 알고리즘 분류 - 해시를 사용한 집합과 맵, 파싱 

난이도 - 실버 3

대표적인 딕셔너리 함수에 대해 알아보겠습니다.

 

1. len() 함수:
len(dictionary) 형태로 사용되며, 딕셔너리의 요소 개수를 반환합니다.

my_dict = {'apple': 3, 'banana': 5, 'orange': 2}
print(len(my_dict))  # 출력: 3

 

2. keys() 메서드:
dictionary.keys() 형태로 사용되며, 딕셔너리의 모든 키를 반환하는 뷰(view) 객체를 반환합니다.

my_dict = {'apple': 3, 'banana': 5, 'orange': 2}
keys = my_dict.keys()
print(keys)  # 출력: dict_keys(['apple', 'banana', 'orange'])

 

3. values() 메서드:
dictionary.values() 형태로 사용되며, 딕셔너리의 모든 값들을 반환하는 뷰(view) 객체를 반환합니다.

my_dict = {'apple': 3, 'banana': 5, 'orange': 2}
values = my_dict.values()
print(values)  # 출력: dict_values([3, 5, 2])

 

4. items() 메서드:
dictionary.items() 형태로 사용되며, 딕셔너리의 모든 키-값 쌍을 반환하는 뷰(view) 객체를 반환합니다.

my_dict = {'apple': 3, 'banana': 5, 'orange': 2}
items = my_dict.items()
print(items)  # 출력: dict_items([('apple', 3), ('banana', 5), ('orange', 2)])

 

5. get() 메서드:
dictionary.get(key) 형태로 사용되며, 주어진 키에 해당하는 값을 반환합니다. 키가 존재하지 않을 경우에는 None을 반환하거나, 기본값을 설정하여 반환할 수도 있습니다.

my_dict = {'apple': 3, 'banana': 5, 'orange': 2}
print(my_dict.get('apple'))  # 출력: 3
print(my_dict.get('grape'))  # 출력: None
print(my_dict.get('grape', 0))  # 출력: 0 (기본값으로 0을 반환)

🔶 문제 풀이 - 딕셔너리를 이용한 풀이

n = int(input())  # 파일의 개수 입력 받기

dict = {}  # 확장자별 파일 개수를 저장할 딕셔너리 초기화

for _ in range(n):
    x = input()  # 파일 이름 입력 받기
    y = x.split('.')[-1]  # 파일 이름에서 확장자 추출하기

    if y in dict:  # 딕셔너리에 해당 확장자가 있다면 개수 1 증가
        dict[y] += 1
    else:  # 딕셔너리에 해당 확장자가 없다면 새로운 키-값 쌍 추가
        dict[y] = 1

for i, j in sorted(dict.items()):  # 딕셔너리의 키-값 쌍을 정렬하여 출력
    print(i, j)  # 확장자와 해당 확장자의 개수를 출력

🔶문제 이해하기 

아래와 같이 예시가 있다고 가정해 보겠습니다.

8
sbrus.txt
spc.spc
acm.icpc
korea.icpc
sample.txt
hello.world
sogang.spc
example.txt

 

n = 5
file_names = ['sbrus.txt', 'spc.spc', 'acm.icpc', 'korea.icpc', 'sample.txt', 'hello.world', 'sogang.spc', 'example.txt']
dict = {}

for x in file_names:
    y = x.split('.')[-1]  # 파일 이름에서 확장자 추출하기

    if y in dict:  # 딕셔너리에 해당 확장자가 있다면 개수 1 증가
        dict[y] += 1
    else:  # 딕셔너리에 해당 확장자가 없다면 새로운 키-값 쌍 추가
        dict[y] = 1

 

위 예시에서는 파일 이름의 리스트 file_names가 주어집니다.

 

for 루프를 통해 각 파일 이름을 순회하면서 확장자를 추출하여 딕셔너리 dict에 개수를 세는 과정을 수행합니다.

 

'sbrus.txt'의 경우, 확장자는 'txt'입니다. 'txt'가 dict에 없으므로 새로운 키-값 쌍을 추가하고 개수를 1로 설정합니다.

 

'spc.spc'의 경우, 확장자는 'spc'입니다. 'spc'가 dict에 없으므로 새로운 키-값 쌍을 추가하고 개수를 1로 설정합니다.

 

'acm.icpc'의 경우, 확장자는 'icpc'입니다. 'icpc'가 dict에 없으므로 새로운 키-값 쌍을 추가하고 개수를 1로 설정합니다.

 

'korea.icpc'의 경우, 확장자는 'icpc'입니다. 'icpc'가 dict에 존재하므로 개수를 2로 설정합니다.

 

'sample.txt'의 경우, 확장자는 'txt'입니다. 'txt'가 dict에 존재하므로 개수를 2로 설정합니다.

 

'hello.world'의 경우, 확장자는 'world'입니다. 'world'가 dict에 없으므로 새로운 키-값 쌍을 추가하고 개수를 1로 설정합니다.

 

'sogang.spc'의 경우, 확장자는 'spc'입니다. 'spc'가 dict에 존재하므로 개수를 2로 설정합니다.

 

'example.txt'의 경우, 확장자는 'txt'입니다. 'txt'가 dict에 존재하므로 개수를 3으로 설정합니다.

 

딕셔너리 dict에는 확장자별 파일 개수가 저장됩니다. 위의 예시에서는 다음과 같은 결과를 출력합니다:

 

icpc 2
spc 2
txt 3
world 1
 

🤗파이팅입니다~ 여러분!!🤗

728x90