PS/BOJ&Programmers
[백준/22232] 가희와 파일 탐색기
sebinChu
2024. 2. 28. 00:52
가희와 파일 탐색기
알고리즘
정렬이 순서대로 이어져야 하므로 lambda를 활용하였다.
또한, 2 번째 조건은 까다로워서 정렬함수 말고 직접 교체해주었다.
전체 코드
import sys;input=sys.stdin.readline
n,m=map(int, input().split())
jo_test = [input().rstrip() for _ in range(n)]
ext = set(input().rstrip() for _ in range(m))
jo_test_split = []
for item in jo_test:
jo_test_split.append(item.split("."))
# 첫 번째 정렬
jo_test_split = sorted(jo_test_split, key=lambda x : (x[0], x[1]))
# 두 번째 정렬
for i in range(n-1):
# 파일명이 같은 경우
if jo_test_split[i][0] == jo_test_split[i+1][0]:
# 뒷순서의 파일의 확장자만 존재하는 경우
if jo_test_split[i][1] not in ext and jo_test_split[i+1][1] in ext:
tmp = jo_test_split[i]
jo_test_split[i] = jo_test_split[i+1]
jo_test_split[i+1] = tmp
for item in jo_test_split:
print(item[0]+"."+item[1])
알게된 점
- 파이썬 리스트 in 연산자는 복잡도가 O(n)이다. 따라서 in을 통해 존재 여부만 판단하고 싶다면 딕셔너리나 set을 이용하자.
- lambda는 If문도 사용 가능하다. sorted(li, key=labmda(참일 때 if 조건 else 거짓일 때) : print if 한줄로 쓰기랑 똑같다.
- sorted + lambda의 시간 복잡도는 O(nlogn)이다.