본문 바로가기

백준 write-up/정렬 & 그리디

[백준] 파일 정리 : 20291번 - Python

728x90
반응형

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

 

20291번: 파일 정리

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

www.acmicpc.net

 

 

 

문제를 풀면서 몰랐던 개념

 

[Python] 리스트 요소별 개수 구하기

1) dictionary를 사용하기

: 딕셔너리에는 키 값이 하나만 존재한다는 특징을 가지고 있기 때문에 각 요소별 개수를 구할 수 있다.

dict = {}
test = [1,2,1,3,4,5,3,3]

for i in test:
    if dict.get(i):
        dict[i] += 1
    else:
        dict[i] = 1

print(dict)

# 출력결과
>>> {1: 2, 2: 1, 3: 3, 4: 1, 5: 1}

 

2) collections 모듈 사용하기

import collections

dict = {}
test = [1,2,1,3,4,5,3,3]

dict = collections.Counter(test)

print(dict)

# 출력결과
>>> Counter({3: 3, 1: 2, 2: 1, 4: 1, 5: 1})

 

[Python] 딕셔너리 정렬

-> key를 이용한 정렬

: sortet() 함수 사용

dict = {1: 2, 2: 1, 3: 3, 4: 1, 5: 1}
sdict = sorted(dict.items())

print(sdict)

# 출력결과
>>> [(1, 2), (2, 1), (3, 3), (4, 1), (5, 1)]

* items() 함수는 key-value 쌍이 tuple로 구성된 리스트가 리턴된다.

 

[Python] 반복문 2차원 (튜플)리스트 요소 출력

: 변수를 두 개 설정해주기

# 리스트
a = [[10,20],[30,40],[50,60]]
for x,y in a:
	print(x,y)

>>> 10 20
>>> 30 40
>>> 50 60


# 튜플리스트

arr = [('icpc', 2), ('spc', 2), ('txt', 3), ('world', 1)]
for i,j in arr:
	print(i,j)

>>> icpc 2
>>> spc 2
>>> txt 3
>>> world 1

 

 

 

 

문제의 접근 방법

 

- 파일 이름과 확장자를 분리할 수 있는 방법 생각하기

- 리스트의 각 요소별 개수 출력하기

- 사전 순으로 정렬

 

 

 

내가 막혔던 부분

 

딕셔너리에 대한 개념

 

 

 

문제 풀이 방법

 

(1) 바탕화면에 있는 파일의 개수 N 입력받기

(2) N개의 파일 이름과 확장자를 '점(.)'을 기준으로 나눠서 입력받기

(3) 파일의 확장자만(인덱스 1번째 요소) arr에 추가하기

(4) arr안에서 미리 선언해둔 딕셔너리 dict를 이용해 리스트 속 각 확장자의 개수를 구하기

(5) 키 값(확장자 이름)을 기준으로 정렬

(6) 출력형식에 맞춰서 확장자 이름과 그 개수를 출력하기

 

 

 

소스코드

N = int(input())

arr = []
dict = {}

for i in range(N):
    file = input().split('.')
    arr.append(file[1])

for i in arr:
    if dict.get(i):
        dict[i] += 1
    else:
        dict[i] = 1

dict = sorted(dict.items())

for i,j in dict:
    print(i,j)
728x90
반응형