Programmers_2018 KAKAKO BLIND RECURITMENT[3차] 파일명 정렬(python)
프로그래머스 -파일명 정렬 문제 입니다.
1. 문제
https://programmers.co.kr/learn/courses/30/lessons/17686
2. 분류 및 난이도
Programmers 문제입니다.
KAKAO BLIND RECURITMENT[3차] 문제입니다.
Level 2난이도의 문제입니다.
3. 생각한 것들(문제 접근 방법)
- 직관적으로 풀었습니다.
- 정렬 조건이 2개 존재합니다.
- 문자열은 사전순, 숫자는 오름차순으로 정렬해야해서 따로따로 떼줍니다.
- 뒤의 문자(tail)은 생각하지 않았습니다.
4. 접근 방법을 적용한 코드
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
#문자열을 잘라줍니다. 자른곳까지의 문자들과 인덱스를 리턴합니다.
#인데스를 리턴하는 이유는, 다음에 찾아야할 숫자에 대한 정보를 빠르게 찾기 위함입니다.
def dif_chat(string) :
res = ""
i=0
for i in range(len(string)):
if string[i].isdigit():
return res.lower(),i
res+=string[i]
return res.lower(),i
# 위의 함수에서 받은 인덱스 정부터 끝까지 돌면서 정수인경우 값을 임시 문자열에 넣고 반환합니다.
def dif_num(string,idx):
res = ""
while idx < len(string) and string[idx].isdigit():
res+= string[idx]
idx+=1
return res
def solution(files):
answer = []
tp =[]
for i in range(len(files)):
# filestr에는 문자들이, idx에는 자른 위치에대한 정보값이 들어가 있습니다.
filestr,idx = dif_chat(files[i])
# filenum에는 숫자들이 문자열형태로 들어있습니다.
filenum = dif_num(files[i],idx)
# 이런식으로 하면 0012는 12로 변환되어 무시할 수 있게됩니다.
filenum = int(filenum)
# Key값 정렬을 위해 tuple로 넣어줬습니다.
temptuple = (filestr,files[i],filenum)
tp.append(temptuple)
#print(tp)
# tup[0]에 대한 정렬을 먼저한 뒤, tup[2]에대해 정렬을 합니다.
# tup[0]는 filestr로 자른 문자열, tup[2]에는 숫자에대한 정보가 들어있습니다.
tp = sorted(tp, key=lambda tup: (tup[0],tup[2]))
# 정렬된 뒤 tp[i][1]에는 원본 문자열이 들어있으므로 해당 값을 결과값에 넣어줍니다.
for i in range(len(tp)):
answer.append(tp[i][1])
return answer
5. 결과
필요시. c++ 짜드리겠습니다.
This post is licensed under CC BY 4.0 by the author.