학교 시험이 얼추 끝나고 싸강 시험만 남아서 여유가 좀 생겨 코테에 다시 집중해보려 한다!
오늘부터 1/13일에 있을 naver AI boostcamp 준비 시작.
한달 동안 죽었다 생각하고 도전해볼 생각이다
from collections import deque
def solution(numbers, target):
answer = 0
queue = deque()
queue.append([0, numbers[0]])
queue.append([0, -1*numbers[0]])
while queue:
idx, num = queue.popleft()
idx += 1
if idx == len(numbers):
if num == target:
answer += 1
else:
queue.append([idx, num+numbers[idx]])
queue.append([idx, num-numbers[idx]])
return answer
< 풀이 과정 >
그동안 그래프 문제는 행렬 문제와 유사하게 생긴 것만 풀다가 이런 형태로 접근하니 색다르게 느껴졌고 문제 풀이를 하고자 접근하는데 시간이 좀 걸렸다.
answer = 0
def dfs(idx, num, numbers, target):
global answer
if idx == len(numbers):
if num == target:
answer += 1
return
else:
dfs(idx+1, num+numbers[idx], numbers, target)
dfs(idx+1, num-numbers[idx], numbers, target)
def solution(numbers, target):
global answer
dfs(0,0,numbers,target)
return answer
< 풀이 과정 >
DFS를 이용한 풀이 DFS함수를 새로 만들어서 문제를 해결하였다.
def solution(msg):
alpha = {}
for i in range(26):
alpha[chr(65+i)] = i+1
idx = 0
number = 27
check =''
answer = []
while idx < len(msg):
check += msg[idx]
if check in alpha:
idx += 1
else:
alpha[check] = number
number += 1
answer.append(alpha[check[:-1]])
check = ''
answer.append(alpha[check])
return answer
< 풀이 과정 >
문제를 보자마자 알파벳 별 indexing을 위해 chr함수와 dictionary 구조를 이용하였다.
import heapq
def solution(scoville, K):
answer = 0
heapq.heapify(scoville)
while scoville[0] < K:
mixing = heapq.heappop(scoville) + heapq.heappop(scoville)*2
heapq.heappush(scoville, mixing)
answer += 1
if scoville[0] < K and len(scoville) == 1:
return -1
return answer
< 풀이 과정 >
sorting과 pop이 필요하다면 heapq로 해결하는 것이 가장 효율적이다.
heapq는 이전에 공부했던 적이 있어 바로 문제 풀이를 할 수 있었다.
위 문제를 풀면서 heap을 다시 정리해보고자 한다.
- heapq (오름차순 정렬된 트리 형태 구조) - 최소힙, 최대힙 존재
heapify(list) : 리스트 > 힙 자료구조 변환 가능
heappop(heap) : 힙 내 최솟값 리턴
heappush(heap, number) : 힙에 숫자 추가
- 최소힙의 경우 루트노드가 최솟값으로 시작
위 문제는 최소힙 case로 해결 가능.
- 최대힙의 경우 루트노드가 최댓값으로 시작
그러나 최대힙의 경우 부호 변경이 필수!!
< 부호 변경 하는 방법 >
heapq.heappush(heap, -number)
-heapq.heappop(heap)
위와 같은 방법을 통해 부호 변환하여 큰 숫자부터 출력 가능!