파일명을 받아서 중복을 제외한 곡의 수를 출력하는 문제이다.
주의해야 할 점은 입력방식이 그냥 파일명이 있는 것과 폴더와 파일명이 같이 있는걸로 나뉘어지고, 파일명도 네 가지의 경우로 나뉜다는 것이다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
|
#jeonglibe
import sys
songlist = []
for i in range(case):
songchange = fileandsong[-1].replace('. ', '_').replace(' - ', '_').replace('.', '_').lower() # 형식 통일, 소문자로
del artistandsong[-1] # mp3 지우기
if len(artistandsong) == 3: # 트랙번호가 있으면 지우기
del artistandsong[0]
if artistandsong in songlist: # 아티스트 명과 제목이 같은게 있는지 확인
continue
else:
print(len(songlist))
http://colorscripter.com/info#e" target="_blank" style="color:#4f4f4ftext-decoration:none">Colored by Color Scripter
|
그래서 우선 폴더와 파일명이 같이 있는 경우를 대비해 split을 써서 폴더가 있는 부분을 날렸다. (폴더 부분을 뺀 파일명만을 쓰도록)
그다음은 '.' , '_' , ' - ' , '. ' 과 같은 파일명 중간에 들어가는 부호들을 한꺼번에 자르기 위해 '_' 하나로 통일시켰다. 그리고 대소문자 구분을 하지 않는다고 문제에 써있어서 소문자로 전부 통일시켰다.
자른 후엔 파일 뒤에 붙어있는 mp3를 없애고(필수적인건 아니지만 아티스트 명과 곡 제목만을 보이게 함), 트랙번호가 있는 경우 지우게 했다. (이건 필수적으로 지워야한다고 생각했음)
그리고 songlist 안에 아티스트 명과 곡 제목 둘다 같은 요소가 있는지 확인하고, 없으면 songlist에 추가시켰다. (중복되지 않는 내용만 추가됨)
최종적으론 songlist의 길이를 출력한다.
문제에 나온 예시를 돌려본 결과.
마지막줄은 songlist안의 내용을 출력해보게 한건데, 중복되지 않은 것만 잘 들어간 거 같다.
정답.
느낀점:
1. 초반엔 문제에서 요구하는 조건이 많아서 (입력 경우도 많고, 중간에 들어가는 부호도 많고, 대소문자 구분도 안하고 등) 꽤 어려울 줄 알았는데 생각보다 잘 풀려서 안심했다.
2. 파이썬의 유용한 함수를 써서 쉽게 풀었다는 생각이 든다. in 함수도 그렇고 replace도 그렇고... 역시 쉬운 언어.
3. 3번의 시도끝에 문제를 풀었는데, 통계를 보니 한번도 안틀리고 푼 사람들이 꽤 된다. 어떻게 하면 저렇게 잘 풀 수 있을까...
'코테용 문제풀이 > 알고스팟' 카테고리의 다른 글
알고스팟 tiling2 문제 파이썬으로 풀기 (0) | 2019.08.26 |
---|---|
알고스팟 hamming code 문제 파이썬으로 풀기 (0) | 2019.08.22 |
알고스팟 goodset 문제 파이썬으로 풀기 (0) | 2019.08.11 |
알고스팟 anagram 문제 파이썬으로 풀기 (0) | 2019.08.11 |
알고스팟 zeroone 문제 파이썬으로 풀기 (0) | 2019.07.16 |