def solution(board, moves):
bucket = []
answer = 0
for i in range(len(moves)) :
# 맨 윗줄이 0 이면 그 밑의 줄로 이동
for j in range(len(board)) :
item = board[j][moves[i]-1]
if item != 0 :
break
# 한줄 전체가 비었을 경우 맨 처음으로 돌아감
if item == 0 :
continue
bucket.append(item)
board[j][moves[i]-1] = 0
if len(bucket) >= 2 and item == bucket[-2] :
del bucket[-2:]
answer += 2
return answer
풀이
for i in range(len(moves)) :
# 맨 윗줄이 0 이면 그 밑의 줄로 이동
for j in range(len(board)) :
item = board[j][moves[i]-1]
if item != 0 :
break
# 한줄 전체가 비었을 경우 맨 처음으로 돌아감
if item == 0 :
continue
1. 먼저 moves의 길이만큼의 반복문을 먼저 만들어 준다.
2. 두번째 반복문에서는, moves에 입력되어 있는 각각의 값(칸)에서 맨 위부터(board[0]부터) 뽑아내는데, item이 0이면 지나쳐서 그 밑의 칸으로 이동하는 형식으로 만들어 주었다.
(board는 행을 기준으로(?) 입력되어있다. 따라서 j를 1씩 더해주며 옮겨준다.)
예를 들면 board가 [[0,0,0,0,0],[0,0,1,0,3],[0,2,5,0,1],[4,2,4,4,2],[3,5,1,3,1]]이고, moves가 1 일때,
[0,0,0,4,3](board[0:4][0]) 에서 0을 제외한 맨 처음 값을 뽑아내는 것임
2) 그러나 그 칸 전체가 0일 경우에는, 맨 처음 for문으로 돌아가준다. (0을 bucket에 담는 것을 방지)
bucket.append(item)
board[j][moves[i]-1] = 0
if len(bucket) >= 2 and item == bucket[-2] :
del bucket[-2:]
answer += 2
1. item을 bucket에 담아주고
2. board에서 item이 있던 자리에 0을 대입시켜준다.(item을 꺼냈으므로)
3. bucket에 item이 2개 이상 담겨있고, 마지막에 담은 item과 그 아래에 있는 item이 같다면,
1) 아이템 둘을 지워준다.
2) 아이템 두대가 없어졌으므로 answer에 +2 해준다.
'Algorithm > Programmers' 카테고리의 다른 글
[Python] 모의고사 (0) | 2021.04.06 |
---|---|
[Python] 신규 아이디 추천 (0) | 2021.04.05 |
[Python] 두 개 뽑아서 더하기 (0) | 2021.04.04 |
[Python] 기본 수학 1 (0) | 2021.02.11 |
[Python] 기본수학 1 (0) | 2021.02.02 |