def solution(board, moves):
answer = 0 # basket에서 같은거 만날때 +1
vertical=[]
basket=[]
for i in range(len(board)):
vertical.append([])
for i in board:
for j in range(len(board)):
# i는 board순회 j는 board의 인덱스 추출
vertical[j].append(i[j])
for i in moves: # i는 board의 가로 번호
j=0
while(vertical[i-1][j]==0):
# 0이 나오지않을때까지 vertical원소 지나치기
j+=1
if j==len(board)-1:break # 모두 0일때
if vertical[i-1][j]!=0:
basket.append(vertical[i-1][j])
vertical[i-1][j]=0
length=len(basket)
for b in range(1,length):
if basket[b-1]==basket[b]:
basket[b-1]=0
basket[b]=0
answer+=1
while(basket.count(0)>0):
basket.remove(0)
return answer*2
board의 인형들을 같은인덱스끼리 따로 저장한다. 즉, 세로열의 원소들끼리 따로 뽑아서 vertical 리스트에 저장한다.
반복문을 사용해 move에 해당하는 인덱스를 i로 순회시키고 vertical에 접근한다.
0은 빈 공간이므로 0이 아닌 원소가 나올때까지 while문을 사용해 접근한다.
이때 한줄이 0일때가 있기때문에 break문을 이용해 빠져나오고, 0인지 또 확인해 basket(인형 바구니)에 넣어준다.
바구니에 넣어준 인형들은 0으로 값을 바꿔준다. 이 작업이 move의 크기만큼 반복된다.
작업이 끝날때마다 바구니에 같은 인형이 연속적으로 있는지 확인해주고 같은 인형들은 삭제하고 answer+1을 진행시킨다.
반환값은 사라진 인형들의 개수이므로 answer의 두 배가 된다.
'자기개발👨💻 > 코딩 알고리즘' 카테고리의 다른 글
[python] 문자열 다루기 기본 (예외처리로 해결) (0) | 2021.01.03 |
---|---|
[python] 2016년 (요일구하기) (0) | 2021.01.03 |
같은 숫자는 싫어 (틀린코드/맞는코드) (1) | 2021.01.03 |
[python] 백준 9506 약수들의 합 (2) | 2021.01.02 |
[python] 백준 1463 1로 만들기 (2) | 2020.12.28 |
[python] 백준 2480 주사위 세개 (2) | 2020.12.27 |