반응형
1. H-Index
https://programmers.co.kr/learn/courses/30/lessons/42747
처음에 대부분의 테스트를 통과하지 못했었는데 문제를 잘못 이해하고 있었습니다. h의 값이 반드시 citations배열에 존재 하지 않아도 된다는 것을 간과했습니다. 다음은 정답 판정 받은 풀이입니다.
def solution(citations):
answer = 0
citations.sort(reverse=True)
lst = [i for i in range(max(citations))]
lst.sort(reverse=True)
for h in lst:
lg = 0
sm = 0
for num in citations:
if h <= num:
lg += 1
if lg >= h:
answer = h
break
return answer
하지만 코드를 줄일 수 없을까 고민하다가 다음과 같은 풀이를 찾았습니다.
def solution(citations):
citations.sort()
length = len(citations)
for i in range(length):
if citations[i] >= length - i:
return length - i
return 0
2. [3차] 파일명 정렬
https://programmers.co.kr/learn/courses/30/lessons/17686#
처음 정규식으로 풀 수 있을 것같았지만 정규표현식이 아직 익숙하지 않아서 for문으로 타입을 체크하는 방식으로 시도했습니다.
def solution(files):
answer = []
lst = []
for idx, file in enumerate(files):
s = n = rest = ''
s_flag = True
for each in file:
if not each.isdigit():
temp_s = each.lower()
if s_flag:
s += temp_s
if each.isdigit():
s_flag = False
n += each
lst.append((s, n, idx))
lst.sort(key=lambda x: (x[0], int(x[1]), x[2]))
for i in lst:
answer.append(files[i[2]])
return answer
위와 같이 풀었지만 테스트케이스에서 7개 정도가 통과를 하지 못했습니다. 그리고 정규식으로 푸는 방법을 찾아보았습니다.
어떤 테스트케이스에서 통과를 못하는지 찾지 못해서 다른 팀원분에게 질문드렸고 답을 찾을 수 있었습니다.
tail에서 숫자가 중복으로 붙을 수 있다는 점이 문제였습니다. 다음은 수정한 코드입니다.
def solution(files):
answer = []
lst = []
for idx, file in enumerate(files):
s = n = rest = ''
s_flag = True
for i, each in enumerate(file):
if each.isdigit():
n += each
s_flag = False
elif s_flag:
s += each.lower()
else:
rest = file[i:]
break
lst.append((s, n, idx))
print(lst)
lst.sort(key=lambda x: (x[0], int(x[1]), x[2]))
for i in lst:
answer.append(files[i[2]])
return answer
정규식으로 풀면 코드길이가 매우 줄어들기 때문에 다음에 같은 유형의 문제를 마주쳤을 때 효율적으로 풀기 위해서 정규표현식에 대해 공부를 해야겠습니다.
다음은 re를 이용한 풀이과정과 코드입니다.
import re
def solution(files):
temp = [re.split(r"([0-9]+)", s) for s in files]
sort = sorted(temp, key=lambda x: (x[0].lower(), int(x[1])))
return [''.join(s) for s in sort]
re는 정규식 관련 라이브러리입니다.
1. 우선 숫자를 기준으로 split 합니다.
2. 조건에 맞춰서 정렬합니다.
3. 정렬된 리스트 안에 있는 split된 것을 문자열로 합쳐서 출력한다.
반응형
'부트캠프' 카테고리의 다른 글
[알고리즘 3주차] WIL - 힙, 정렬(버블, 선택, 삽입, 퀵, 머지, 힙) (0) | 2022.04.03 |
---|---|
[23일차] TIL 이진 탐색(Binary Search) - (1) (0) | 2022.04.01 |
[19일차] TIL (Quick Sort) (0) | 2022.03.28 |
[알고리즘 2주차] WIL (Graph, DFS, BFS, Tree) (0) | 2022.03.27 |
[17일차] TIL - Heap (0) | 2022.03.25 |