코딩 테스트
-
사칙연산코딩 테스트/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 0 2022. 12. 16. 23:04
https://school.programmers.co.kr/learn/courses/30/lessons/120924 파이썬 def solution(c): if (temp := c[1] - c[0]) == c[2] - c[1]: # 등차 수열이라면 return c[-1] + temp return (c[1] / c[0]) * c[-1] 코드 자체는 어렵지 않은데 등차수열과 등비수열의 단어가 익숙하지 않아서 오답이 좀 있었던 것 같다. 아직 등차와 등비수열을 배우지 않은 학생들도 있을 것 같고.. 파이썬에서는 a[-1]로 a 리스트의 마지막 원소를 가져올 수 있다. 다른 언어에서는 보통 a[len(a) - 1] 로 접근하는데... 파이썬에서는 len(a)를 생략할 수 있다. 이런 느낌이 파이써닉. 등차수열은 ..
-
고고학 최고의 발견코딩 테스트/Level 3 2022. 12. 11. 22:03
https://school.programmers.co.kr/learn/courses/30/lessons/131702 고고학 최고의 발견 연습문제 Lv. 3 62명 4% 요약 첫 번째 줄이 결정되면, 두 번째 줄도 1가지 케이스로 결정된다. 첫 번째 줄의 모든 케이스를 전수조사(BF)한다. 꽤 힘들게 풀었다 ㅠ,.ㅠ 레벨 3 맞음? 첫 줄이 결정되면 다음 줄의 답도 결정된다. (상하좌우 방향은 관계 없다.) 첫 줄이 3, 0, 3, 0 으로 결정되어 있다면 다음 줄은 1, 0, 1, 0 회전하는 케이스만 존재한다. 그럼 첫 줄은 어떻게 결정할까? 첫 줄과 두 번째 줄은 서로 영향을 주기 때문에.. 복잡한 문제다. 첫 줄을 3, 3, 3, 0 에서 1번 턴을 해서 0, 0, 0, 0 으로 만들었더라도 두 번..
-
트리 트리오 중간값코딩 테스트/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..
-
백준 2805 / 나무 자르기코딩 테스트 2022. 12. 10. 21:28
https://www.acmicpc.net/problem/2805 이 설명을 보고 푸는 것이 도움이 될 것 같다. https://sarah950716.tistory.com/16 def solution(n, m, trees): def cut(mid): cut_trees = 0 for tree in trees: if (temp := tree - mid) > 0: cut_trees += temp return cut_trees def solve(): answer, left, right = 0, 0, max(trees) while left
-
동굴 탐험코딩 테스트/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을 이용해서 이를 확인했다. 이때 구성 블록의 종류..