가희와 파일 탐색기
알고리즘
정렬이 순서대로 이어져야 하므로 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)이다.
'PS > BOJ&Programmers' 카테고리의 다른 글
[백준/1068] 트리 (0) | 2024.03.06 |
---|---|
[백준/2606] 바이러스 | 양방향 그래프 정의 | DFS (0) | 2024.03.05 |
[프로그래머스] 자동차기록에서 장기/단기 대여 구분하기 | DATEDIFF, SQL IF문 (0) | 2024.02.23 |
[프로그래머스] 자동차 종류 별 특정 옵션이 포함된 자동차 수 구하기 | LIKE 사용법 (1) | 2024.02.11 |
[백준/1107] 리모컨 (1) | 2024.02.11 |