PS/BOJ&Programmers

[백준/22232] 가희와 파일 탐색기

sebinChu 2024. 2. 28. 00:52

가희와 파일 탐색기

 

22232번: 가희와 파일 탐색기

첫 번째 줄에 jo_test 폴더에 있는 파일 개수 N과 가희가 설치한 OS에서 인식하는 파일 확장자의 개수 M이 공백으로 구분되어 주어집니다. 2번째 줄부터 N+1번째 줄까지 FILENAME.EXTENSION 형식의 문자열

www.acmicpc.net

 

 


알고리즘

정렬이 순서대로 이어져야 하므로 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)이다.