Skip to content

Commit 656cff9

Browse files
committed
2023 KAKAO BLIND RECRUITMENT 미로 탈출 명령어
문제 링크: https://school.programmers.co.kr/learn/courses/30/lessons/150365
1 parent fd1dbe0 commit 656cff9

File tree

4 files changed

+61
-7
lines changed
  • 2023 KAKAO BLIND RECRUITMENT 1,2,3 떨어트리기
  • 2023 KAKAO BLIND RECRUITMENT 미로 탈출 명령어
  • 2023 카카오 신입 공채 1차 온라인 코딩 테스트 1,2,3 떨어트리기 Python

4 files changed

+61
-7
lines changed

2023 KAKAO BLIND RECRUITMENT 1,2,3 떨어트리기/main.py

+4-6
Original file line numberDiff line numberDiff line change
@@ -61,11 +61,10 @@ def solution(edges: List[List[int]], target: List[int]):
6161
leaves: List[Node] = []
6262

6363
for node_num in nodes.keys():
64-
if nodes[node_num]:
65-
if len(nodes[node_num].children) > 0:
66-
nodes[node_num].children.sort()
67-
else:
68-
leaves.append(nodes[node_num])
64+
if len(nodes[node_num].children) > 0:
65+
nodes[node_num].children.sort()
66+
else:
67+
leaves.append(nodes[node_num])
6968

7069
idx123 = 0
7170
while True:
@@ -80,7 +79,6 @@ def solution(edges: List[List[int]], target: List[int]):
8079
answer = [0] * idx123
8180
for leaf in leaves:
8281
ans = make_target_from123(len(leaf.indexes123), target[leaf.num - 1])
83-
ans.sort()
8482
for idx in range(len(leaf.indexes123)):
8583
answer[leaf.indexes123[idx]] = ans[idx]
8684

Original file line numberDiff line numberDiff line change
@@ -0,0 +1,43 @@
1+
import sys
2+
3+
sys.setrecursionlimit(10 ** 9)
4+
5+
6+
def solution(n, m, y, x, r, c, k):
7+
y, x, r, c = y - 1, x - 1, r - 1, c - 1,
8+
min_distance = abs(y - r) + abs(x - c)
9+
10+
if min_distance > k:
11+
return 'impossible'
12+
13+
if min_distance % 2 != k % 2:
14+
return 'impossible'
15+
16+
answer = dfs(n, m, y, x, r, c, k, [])
17+
18+
if None == answer:
19+
return 'impossible'
20+
21+
return ''.join(answer)
22+
23+
24+
def dfs(n, m, y, x, dst_y, dst_x, depth, pathes):
25+
if depth == 0:
26+
if y == dst_y and x == dst_x:
27+
return pathes
28+
else:
29+
return None
30+
31+
# d: 아래쪽으로, l: 왼쪽으로, r: 오른쪽으로, u: 위쪽으로
32+
for dy, dx, dir in [[1, 0, 'd'], [0, -1, 'l'], [0, 1, 'r'], [-1, 0, 'u']]:
33+
ny, nx = y + dy, x + dx
34+
if 0 <= ny < n and 0 <= nx < m:
35+
distance = abs(ny - dst_y) + abs(nx - dst_x)
36+
if distance > depth -1:
37+
continue
38+
39+
rtn = dfs(n, m, ny, nx, dst_y, dst_x, depth - 1, pathes + [dir])
40+
if rtn != None:
41+
return rtn
42+
43+
return None
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
from unittest import TestCase
2+
from main import solution
3+
4+
5+
class Test(TestCase):
6+
def test1_solution(self):
7+
self.assertEqual("dllrl", solution(3, 4, 2, 3, 3, 1, 5))
8+
9+
def test2_solution(self):
10+
self.assertEqual("dr", solution(2, 2, 1, 1, 2, 2, 2))
11+
12+
def test3_solution(self):
13+
self.assertEqual("impossible", solution(3, 3, 1, 2, 3, 3, 4))

2023 카카오 신입 공채 1차 온라인 코딩 테스트 1,2,3 떨어트리기 Python/main.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -84,7 +84,7 @@ def solution(edges, targets):
8484
nodes[parent_number].add_child_node(nodes[child_number])
8585

8686
for idx in range(101):
87-
if nodes[idx] is not None and len(nodes[idx].indexes) == 0:
87+
if nodes[idx] is not None and len(nodes[idx].children) == 0:
8888
leaves.append(nodes[idx])
8989

9090
current_index = 0

0 commit comments

Comments
 (0)