Skip to content

Commit 20ccfe3

Browse files
committed
2023 KAKAO BLIND RECRUITMENT 표 병합
문제 링크: https://school.programmers.co.kr/learn/courses/30/lessons/150366
1 parent 656cff9 commit 20ccfe3

File tree

2 files changed

+81
-0
lines changed

2 files changed

+81
-0
lines changed
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,62 @@
1+
from typing import List
2+
3+
4+
def solution(commands: List[str]):
5+
MX = 51
6+
map = [['EMPTY' for _ in range(MX)] for _ in range(MX)]
7+
merged = [[(r, c) for c in range(MX)] for r in range(MX)]
8+
answer = []
9+
10+
for cmd in commands:
11+
cmd = cmd.split(' ')
12+
13+
if cmd[0] == 'UPDATE' and len(cmd) == 4:
14+
r, c, v = int(cmd[1]), int(cmd[2]), cmd[3]
15+
if merged[r][c] == (r,c):
16+
map[r][c] = v
17+
else:
18+
mr, mc = merged[r][c]
19+
map[mr][mc] = v
20+
21+
elif cmd[0] == 'UPDATE' and len(cmd) == 3:
22+
_, v1, v2 = cmd
23+
24+
for r in range(1, MX):
25+
for c in range(1, MX):
26+
if map[r][c] == v1:
27+
map[r][c] = v2
28+
29+
elif cmd[0] == 'MERGE':
30+
r1, c1, r2, c2 = int(cmd[1]), int(cmd[2]), int(cmd[3]), int(cmd[4])
31+
to = merged[r1][c1]
32+
fr = merged[r2][c2]
33+
if map[to[0]][to[1]] == 'EMPTY':
34+
map[to[0]][to[1]] = map[fr[0]][fr[1]]
35+
36+
for r in range(1, MX):
37+
for c in range(1, MX):
38+
if merged[r][c] == fr:
39+
merged[r][c] = to
40+
41+
elif cmd[0] == 'UNMERGE':
42+
sr, sc = int(cmd[1]), int(cmd[2])
43+
mr, mc = merged[sr][sc]
44+
v = map[mr][mc]
45+
46+
for r in range(1, MX):
47+
for c in range(1, MX):
48+
if merged[r][c] == (mr, mc):
49+
merged[r][c] = (r, c)
50+
map[r][c] = 'EMPTY'
51+
52+
map[sr][sc] = v
53+
54+
elif cmd[0] == 'PRINT':
55+
r, c = int(cmd[1]), int(cmd[2])
56+
if merged[r][c] != (r, c):
57+
mr, mc = merged[r][c]
58+
answer.append(map[mr][mc])
59+
else:
60+
answer.append(map[r][c])
61+
62+
return answer
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
from unittest import TestCase
2+
from main import solution
3+
4+
5+
class Test(TestCase):
6+
def test1_solution(self):
7+
self.assertEqual(["EMPTY", "group"], solution(
8+
["UPDATE 1 1 menu", "UPDATE 1 2 category", "UPDATE 2 1 bibimbap", "UPDATE 2 2 korean", "UPDATE 2 3 rice", "UPDATE 3 1 ramyeon", "UPDATE 3 2 korean", "UPDATE 3 3 noodle",
9+
"UPDATE 3 4 instant", "UPDATE 4 1 pasta", "UPDATE 4 2 italian", "UPDATE 4 3 noodle", "MERGE 1 2 1 3", "MERGE 1 3 1 4", "UPDATE korean hansik", "UPDATE 1 3 group", "UNMERGE 1 4",
10+
"PRINT 1 3", "PRINT 1 4"]))
11+
12+
def test2_solution(self):
13+
self.assertEqual(["d", "EMPTY"],
14+
solution(["UPDATE 1 1 a", "UPDATE 1 2 b", "UPDATE 2 1 c", "UPDATE 2 2 d", "MERGE 1 1 1 2", "MERGE 2 2 2 1", "MERGE 2 1 1 1", "PRINT 1 1", "UNMERGE 2 2", "PRINT 1 1"]))
15+
16+
# 출처: https://school.programmers.co.kr/questions/71705
17+
def testx_solution(self):
18+
self.assertEqual(["EMPTY"],
19+
solution(["MERGE 1 1 2 2", "PRINT 1 1"]))

0 commit comments

Comments
 (0)