코딩 테스트/Level 4
-
지형 이동코딩 테스트/Level 4 2023. 1. 25. 11:38
https://school.programmers.co.kr/learn/courses/30/lessons/62050 queue를 이용. from heapq import heappop, heappush def solution(land, height): answer = 0 que = [(0, 0, 0)] visited = set() while que: p, y, x = heappop(que) if (y, x) in visited: continue visited.add((y, x)) answer += p for dy, dx in ((0, 1), (0, -1), (1, 0), (-1, 0)): next_y, next_x = y + dy, x + dx if not (len(land) > next_y >= 0 and..
-
행렬과 연산코딩 테스트/Level 4 2022. 12. 24. 21:45
https://school.programmers.co.kr/learn/courses/30/lessons/118670 level 2 수준으로 풀어봄.. 당연히 통과는 불가능. from copy import deepcopy def shift_row(a: list) -> list: return a[-1:] + a[:-1] def rotate(a: list) -> list: b = deepcopy(a) b[0] = a[1][:1] + a[0][:-1] b[-1] = a[-1][1:] + a[-2][-1:] for i in range(1, len(a) - 1): b[i][0] = a[i + 1][0] b[i][-1] = a[i - 1][-1] return b def solution(rc, operations): ..
-
사칙연산코딩 테스트/Level 4 2022. 12. 21. 21:53
https://school.programmers.co.kr/learn/courses/30/lessons/1843 DP 대신 재귀와 lru_cache로 풀 수 있을 때도 있다~! from functools import lru_cache def solution(arr): @lru_cache(maxsize=None) def solve(t): if len(t) == 1: return [int(t[0])] result = [n1 + (n2 if t[i] == "+" else -n2) for i in range(1, len(t), 2) for n1 in solve(t[:i]) for n2 in solve(t[(i + 1):])] return [max(result), min(result)] return max(sol..
-
트리 트리오 중간값코딩 테스트/Level 4 2022. 12. 11. 18:42
https://school.programmers.co.kr/learn/courses/30/lessons/68937 def solution(n, edges): def bfs(first_node): queue = deque([(first_node, 0)]) visited = {first_node: 0} max_dist = 0 while queue: node, distance = queue.popleft() for next_node in tree[node]: if next_node not in visited: visited[next_node] = distance + 1 queue.append((next_node, distance + 1)) max_dist = max(max_dist, distance + 1) ..
-
지형 편집코딩 테스트/Level 4 2022. 12. 10. 22:19
https://school.programmers.co.kr/learn/courses/30/lessons/12984 def solution(land, p, q): # p 추가 비용, q 제거 비용 land = sorted(each for row in land for each in row) cost = (sum(land) - land[0] * len(land)) * q answer = cost for i in range(1, len(land)): if land[i] != land[i - 1]: cost += (p * i * (land[i] - land[i - 1]) - q * (len(land) - i) * (land[i] - land[i - 1])) answer = min(answer, cost) if a..
-
동굴 탐험코딩 테스트/Level 4 2022. 12. 10. 13:53
https://school.programmers.co.kr/learn/courses/30/lessons/67260 def solution(n, path, order): from collections import deque tree = {} for a, b in path: tree.setdefault(a, set()) tree.setdefault(b, set()) tree[a].add(b) tree[b].add(a) orders = {b: a for a, b in order} # '도착: 출발' 로 순서 바꿈 queue = deque([0]) visited = set() yet = {} while queue: node = queue.popleft() if node in orders and orders[no..
-
블록 게임코딩 테스트/Level 4 2022. 12. 10. 01:08
https://school.programmers.co.kr/learn/courses/30/lessons/42894 처음에는 한 줄 한 줄 0과 블록과 빈칸을 따져가면서 코딩했는데. 생각지 못한 케이스가 많아서, 하나를 해결하면 다른 케이스가 문제가 되는 상황. 방향을 바꿔 문제에서 주어진 데로 코딩해 보았다. 단, 검은 블록(-1)은 두 개씩 떨어트렸다. 세로로 된 L자형 블록은 지울 때 검은 블록 2개가 필요하니까.. 처음 시도했던 것 보다 구현도 간단하고 깔끔하다. 보드의 모든 좌표에서 2*3, 3*2 탐색을 하면서 블록을 체크한다. 6칸의 보드가 기본 블록 4개와 검은 블록 2개로 가득 차 있으면 지울 수 있다. Counter와 most_common을 이용해서 이를 확인했다. 이때 구성 블록의 종류..
-
2017 팁스타운: 단어 퍼즐코딩 테스트/Level 4 2022. 12. 8. 00:44
https://school.programmers.co.kr/learn/courses/30/lessons/12983 def solution(pieces, word): pieces = set(pieces) dp = [float('inf') for _ in range(len(word) + 1)] dp[0] = 0 for index, _ in enumerate(word): if dp[index] == float('inf'): continue for len_piece in range(1, 6): if index + len_piece = len(word): return counter return min(results) if (results := [search(index + len(each), counter + 1)..