🤔 문제
https://programmers.co.kr/learn/courses/30/lessons/17686
😀 풀이
본 문제는 주어진 파일명 배열을 몇 가지 조건에 따라 정렬하면 되는 문제입니다.
따라서 배열을 정렬하는 기준인 key 값에 적절한 함수를 넣어주면 풀이할 수 있음을 쉽게 떠올릴 수 있습니다.
문제에서 주어진 정렬 조건은 크게 두 가지가 있습니다.
1. HEAD 부분
HEAD 부분의 경우 파일명의 맨 앞부분부터 숫자가 나오기 직전까지입니다.
이 부분을 얻기 위해 풀이 코드에서는 getHead 라는 함수를 만들었고 getHead의 입출력 예시는 아래와 같습니다.
1) getHead(foo010bar020.zip) ➔ foo
2) getHead(ABCad1123.jpg) ➔ abcad
대소문자는 정렬기준에 포함되지 않고 같게 취급한다는 문제 조건에 의해 getHead함수의 리턴값은 모두 HEAD 부분을 추출해 소문자로 변환시켰습니다.
2. NUMBER 부분
NUMBER 부분의 경우 HEAD 부분을 지나 숫자가 나오는 구간입니다.
이때 NUMBER 부분을 한 번 지난 뒤 나온 숫자에 대해서는 NUMBER 부분으로 취급하지 않습니다.
NUMBER 부분을 얻기 위해 풀이 코드에서는 getNumber 라는 함수를 만들었고 getHead와 비슷한 구조지만 NUMBER 부분을 한 번 지났는지에 대한 여부를 체크하기 위해 isTail이라는 변수를 만들었습니다.
getHead, getNumber 이 두 가지 함수를 기준으로 하여 주어진 입력 배열을 정렬해주면 문제에서 원하는 정답을 얻을 수 있습니다.
💻 풀이 코드는 아래와 같습니다.
def getHead(file):
res = ""
for c in file:
if c.isdigit():
break
else:
res += c
return res.lower()
def getNumber(file):
res = ""
isTail = False
for c in file:
if c.isdigit():
isTail = True
res += c
elif isTail:
break
return int(res)
def solution(files):
answer = sorted(files, key = lambda x : (getHead(x), getNumber(x)))
return answer
반응형
'Algorithm > 프로그래머스' 카테고리의 다른 글
[프로그래머스] 주차 요금 계산 - Python (0) | 2022.02.06 |
---|---|
[프로그래머스] [3차] n진수 게임 - Python (0) | 2022.02.04 |
[프로그래머스] 보석 쇼핑 - Python (2) | 2022.01.29 |
[프로그래머스] [3차] 방금그곡 - Python (0) | 2022.01.28 |
[프로그래머스] [3차] 압축 - Python (0) | 2022.01.27 |