코딩테스트 연습 - [1차] 프렌즈4블록
프렌즈4블록 블라인드 공채를 통과한 신입 사원 라이언은 신규 게임 개발 업무를 맡게 되었다. 이번에 출시할 게임 제목은 "프렌즈4블록". 같은 모양의 카카오프렌즈 블록이 2×2 형태로 4개가 붙
programmers.co.kr
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
|
def solution(m, n, board):
def check(x, y):
# 'R' 같은 문자
k = graph[x][y]
# '0'은 이미 부셔진 상태이므로 바로 탈출
if k == '0':
return
for i in range(4):
one, two, three = move[i]
ax = x + one[0]
ay = y + one[1]
bx = x + two[0]
by = y + two[1]
cx = x + three[0]
cy = y + three[1]
if (0 <= ax < m and 0 <= ay < n) and (0 <= bx < m and 0 <= by < n) and (0 <= cx < m and 0 <= cy < n):
if graph[ax][ay] == graph[bx][by] == graph[cx][cy] == k:
temp.add((x, y))
temp.add((ax, ay))
temp.add((bx, by))
temp.add((cx, cy))
answer = 0
graph = [list(i) for i in board]
move = [
[(-1, -1), (-1, 0), (0, -1)],
[(-1, 0), (-1, 1), (0, 1)],
[(0, -1), (1, -1), (1, 0)],
[(0, 1), (1, 0), (1, 1)]
]
print('초기 그래프')
for i in graph:
print(i)
print()
while True:
temp = set()
# 모든 좌표 check
for i in range(m):
for j in range(n):
check(i, j)
# 2x2 블록이 한개도 깨지지 않았다면, 더이상 부서질 블록은 없으므로 while 문 탈출
if len(temp) == 0:
break
# temp 에 담긴 값들은 사라질 블록들이다. 모두 '0'으로 변환
while temp:
x, y = temp.pop()
graph[x][y] = '0'
print('블록 삭제')
for i in graph:
print(i)
# 빈 공간('0')으로 블록들이 떨어지는 코드
for i in range(n):
for bottom in range(m - 1, 0, -1):
if graph[bottom][i] == '0':
search = False
start_idx = bottom
for find in range(bottom - 1, -1, -1):
if graph[find][i] != '0':
search = True
find_idx = find
find_value = graph[find][i]
break
if search:
graph[start_idx][i] = find_value
graph[find_idx][i] = '0'
print('빈 공간 제거')
for i in graph:
print(i)
print()
for i in range(m):
for j in range(n):
if graph[i][j] == '0':
answer += 1
return answer
m = 6
n = 6
b = ["TTTANT", "RRFACC", "RRRFCC", "TRRRAA", "TTMMMF", "TMMTTJ"]
print(solution(m, n, b))
|
cs |
output:
초기 그래프
['T', 'T', 'T', 'A', 'N', 'T']
['R', 'R', 'F', 'A', 'C', 'C']
['R', 'R', 'R', 'F', 'C', 'C']
['T', 'R', 'R', 'R', 'A', 'A']
['T', 'T', 'M', 'M', 'M', 'F']
['T', 'M', 'M', 'T', 'T', 'J']
블록 삭제
['T', 'T', 'T', 'A', 'N', 'T']
['0', '0', 'F', 'A', '0', '0']
['0', '0', '0', 'F', '0', '0']
['T', '0', '0', 'R', 'A', 'A']
['T', 'T', 'M', 'M', 'M', 'F']
['T', 'M', 'M', 'T', 'T', 'J']
빈 공간 제거
['0', '0', '0', 'A', '0', '0']
['0', '0', '0', 'A', '0', '0']
['T', '0', 'T', 'F', 'N', 'T']
['T', 'T', 'F', 'R', 'A', 'A']
['T', 'T', 'M', 'M', 'M', 'F']
['T', 'M', 'M', 'T', 'T', 'J']
블록 삭제
['0', '0', '0', 'A', '0', '0']
['0', '0', '0', 'A', '0', '0']
['T', '0', 'T', 'F', 'N', 'T']
['0', '0', 'F', 'R', 'A', 'A']
['0', '0', 'M', 'M', 'M', 'F']
['T', 'M', 'M', 'T', 'T', 'J']
빈 공간 제거
['0', '0', '0', 'A', '0', '0']
['0', '0', '0', 'A', '0', '0']
['0', '0', 'T', 'F', 'N', 'T']
['0', '0', 'F', 'R', 'A', 'A']
['T', '0', 'M', 'M', 'M', 'F']
['T', 'M', 'M', 'T', 'T', 'J']
15
move
빈칸 제거 탐색
'알고리즘 문제풀이 with 파이썬 > 프로그래머스' 카테고리의 다른 글
[DFS] 단어 변환 (0) | 2021.10.30 |
---|---|
[그리디, 투 포인터] 구명보트 (0) | 2021.10.28 |
[DFS] 네트워크 (0) | 2021.10.10 |
[완전탐색] 카펫 (0) | 2021.10.09 |
[정렬] H_Index (0) | 2021.10.09 |