Programmers / 2단계 / 2 x n 타일링 / python
·
Coding Test/Programmers
https://school.programmers.co.kr/learn/courses/30/lessons/12900 모범 답안 def solution(n): a, b = 1,1 for i in range(n): a, b = b, a+b return a 동적 계획법의 문제이다. 동적 계획법의 핵심은 점화실을 찾는 것이다. 점화식을 찾기 위해 예를 보면, n = 1: 1 ...................................... -> 1 n = 2: 11, 2 ................................. -> 2 n = 3: 111, 21, 12 ........................ -> 3 n = 4: 1111, 211, 112, 121, 22 ....... -> 5 여기서..
Programmers / 3단계 / 최고의 집합 / python
·
Coding Test/Programmers
https://school.programmers.co.kr/learn/courses/30/lessons/12938 모범 답안 def solution(n, s): answer=[] if s < n: return [-1] for _ in range(n): answer.append(s//n) indexs = len(answer)-1 for i in range(s - sum(answer)): answer[indexs] += 1 indexs -= 1 return answer 원소의 곱이 최대가 되려면 원소끼리의 차가 적어야 하기 때문에 s//n을 answer에 n번 넣은 후 원소의 합에서 모자란 수만큼 for문을 돌려 answer의 마지막 인덱스부터 1을 더해가면 답을 구할 수 있다. 참조 https://minn..
Programmers / 2단계 / 택배상자 / python
·
Coding Test/Programmers
https://school.programmers.co.kr/learn/courses/30/lessons/131704 모범 답안 def solution(order): answer = 0 stack = [] for idx, num in enumerate(order): stack.append(idx+1) while stack and stack[-1] == order[answer]: stack.pop() answer +=1 return answer
Programmers / 2단계 / 숫자 변환하기 / python
·
Coding Test/Programmers
코딩테스트 연습 - 숫자 변환하기 | 프로그래머스 스쿨 (programmers.co.kr) 나의 풀이 (실패) 문제는 쉬워보였지만 막상 적절한 접근 방법이 떠오르지 않았다. def solution(x, y, n): num=[] count=0 x1=x; x2=x; x3=x while x3
Programmers / 2단계 / 롤케이크 자르기 / python
·
Coding Test/Programmers
https://school.programmers.co.kr/learn/courses/30/lessons/132265 나의 풀이 ( 시간 초과 ) 슬라이싱을 이용해 비교하니 시간 초과되었다. def solution(topping): count=0 for i in range(1, len(topping)): if len(set(topping[:i])) == len(set(topping[i:])): count+=1 return count 모범 답안 from collections import Counter def solution(topping): answer = 0 old = Counter(topping) young = set() for i in topping: old[i] -= 1 young.add(i) if ..
Programmers / 3단계 / 이중우선순위큐 / python / heapq
·
Coding Test/Programmers
코딩테스트 연습 - 이중우선순위큐 | 프로그래머스 스쿨 (programmers.co.kr) 모범 답안 import heapq def solution(operations): q = [] for i in operations: oper, num = i.split() num = int(num) if oper == 'I': heapq.heappush(q, num) elif oper == 'D' and num == 1: if len(q) != 0: q.remove(max(q)) else: if len(q)!=0: heapq.heappop(q) if len(q) == 0: answer = [0,0] else: answer = [max(q), heapq.heappop(q)] return answer 학습한 것 heap..
다익스트라(dijkstra) 알고리즘 파이썬 구현 코드
·
Coding Test/Programmers
다익스트라 알고리즘 구현 코드 import heapqdef dijkstra(graph, start): distances = { node : float('inf') for node in graph } distances[start] = 0 queue = [] heapq.heappush(queue, [0, start]) # 거리, 노드 순 while queue: now_dist, now = heapq.heappop(queue) if distances[now] 실행 결과{'A': 0, 'B': 6, 'C': 1, 'D': 2, 'E': 5, 'F': 6} 참조https://justkode.kr/algorithm/python-dijkstra/ Python..
Programmers / 3단계 / 단어 변환 / python / DFS/BFS
·
Coding Test/Programmers
코딩테스트 연습 - 단어 변환 | 프로그래머스 스쿨 (programmers.co.kr) 모범 답안 최소 단계를 구하는 것이므로 BFS로 접근 from collections import deque def solution(begin, target, words): if target not in words : return 0 return bfs(begin, target, words) def bfs(begin, target, words): queue = deque() queue.append([begin, 0]) #시작 단어와 단계 0으로 초기화 while queue: now, step = queue.popleft() if now == target: return step for word in words: count..