[특강] ChatGPT 활용하기
[Heap] 더 맵게
[DP] N으로 표현
[DFS / BFS] 여행경로
Temperature
훈련
Unsupervised Learning
웹상에서 존재하는 문서들이 모델의 훈련 데이터
품질이 중요하기 때문에 위키피디아를 가장 많이 이용
코드에도 적용 가능(Code Completion)하며, 이 경우 Github를 훈련 데이터로 사용
언어 모델에 사용되는 Transformer 모델은 기본적으로 수학 모델
단어를 그대로 사용할 수 없고 이를 숫자로 변환한 후(One-hot encoding) 다시 N차원 공간의 벡터로 변환
Fine Tuning
업무에 사용해보기
검색하거나 주변에 물어보던 모든 일에 ChatGPT를 사용해보기
단발성으로 끝나지 않고 계속해서 이어서 질문해 내가 원하는 것을 얻어내기
질문(Prompt)의 중요성
코딩에 사용해보기
특정 기능의 함수를 구현해야하는 경우 ChatGPT에게 물어보기
코드 리뷰, 주석 작성, 테스트 코드 추가 요구
학습에 사용해보기
업무 자동화, 생산성 증대를 위해 GenAI(Generative AI) 툴을 많이 사용해보기
ChatGPT처럼 각광받는 기술을 바라보는 관점
발전이 너무 빠르기 때문에 이를 쫓아다니는 것은 시간낭비
확실한 방향이 보이기 전까지는 뉴스레터 등을 구독해서 요약본으로만 따라가고, 일상에서 관련 툴을 활용
풀이
scoville의 길이가 최대 1,000,000이므로 O(N) 혹은 O(N * log N)의 알고리즘을 구현해야 함
최소 원소를 빠르게 추출하기 위해 힙(Heap) 사용
구현
import heapq
def solution(scoville, K):
# 리스트를 힙으로 변환
heapq.heapify(scoville)
count = 0
while True:
first = heapq.heappop(scoville)
# 가장 작은 원소가 K 이상이면 반복 종료
if first >= K:
break
else:
# 원소가 남아있다면 두 번째로 작은 원소를 추출해 연산 후 연산 횟수 증가
if len(scoville) >= 1:
second = heapq.heappop(scoville)
heapq.heappush(scoville, first + (second * 2))
count += 1
# 원소가 남아있지 않다면 모든 음식의 스코빌을 K 이상으로 만들 수 없으므로 -1 반환
else:
return -1
# 연산 횟수 반환
return count
풀이
모든 정점이 아닌, 모든 간선을 이용하는 것
스택을 활용한 재귀적인 한 붓 그리기 문제
구현
def solution(tickets):
# 딕셔너리 형태로 인접한 공항 저장
route = {}
for t in tickets:
if t[0] in route:
route[t[0]].append(t[1])
else:
route[t[0]] = [t[1]]
# 리스트의 앞에서 pop하는 것보다 뒤에서하는 것이 더 빠르기 때문에 역순으로 정렬
for key in route:
route[key].sort(reverse = True)
stack = ["ICN"]
visited = []
while len(stack) > 0:
top = stack[-1]
# 스택의 최상단에 있는 공항에서 다른 공항으로 가는 표가 없을 경우 경로에 추가(마지막에 방문)
if top not in route or len(route[top]) == 0:
visited.append(stack.pop())
# 표가 있을 경우, 스택에 추가
else:
stack.append(route[top].pop())
return visited[::-1]
heapq 라이브러리
heapq.heapify(list)
: 인자로 받은 리스트를 힙으로 변환
heapq.heappush(heap, item)
: 인자로 받은 힙에 두 번째 인자로 받은 item 추가
heapq.heappop(heap)
: 인자로 받은 힙에서 가장 작은 값 추출