TIL - algorithm - 03
# 크레인 인형뽑기 게임
def solution(board, moves):
pick_ls = [] # 크래인으로 뽑은 인형을 순서대로 담는 바구니 생성
for x in moves: # x: 2차원 배열의 x좌표에 해당하는 값. 크레인이 해당 x좌표의 인형들을 위에서부터 차례대로 뽑게 된다.
try:
i = 0 # i: 2차원 배열의 y좌표에 해당하는 값.
while board[i][x-1] == 0: # 인덱스가 1이 아닌 0부터 시작되므로, 'x좌표에서 1을 뺀 수'로 지정
# print('!!!')
i += 1 # 해당 좌표(x-1, i)에 인형이 존재하지 않는 경우, y좌표를 +1 이동시켜야 하므로 변화식을 추가. i
# 값은 인형이 존재할 때까지 계속 증가된다.
pick_it = board[i].pop(x-1) # 해당 좌표에 인형이 존재하는 경우, 해당 좌표의 인형을 뽑아야 하므로, 인형에 해당되는 숫자를 제거
pick_ls.append(pick_it) # 뽑은 인형(숫자)을 바구니에 추가
board[i].insert(x-1, 0) # 숫자가 제거된 해당 좌표에 0을 삽입하여 빈자리를 메운다.
except IndexError: # x좌표에 인형이 존재하지 않는 경우 i값이 무한히 커지면서 index error가 발생.
# except문으로 error발생을 방지.
continue
count_bf = len(pick_ls) # 터트려져 사라지기 전 인형 수를 변수 count_bf에 지정
count_af = len(pick_ls) # 터트려져 사라진 후의 인형 수를 변수 count_af에 지정
i = 0
while i < count_af-1: # '인덱스 error 발생을 막기' 위해 len(pick_ls)에서 1을 뺀 수로 조건을 설정했다.
# 어차피 마지막 인덱스 요소는 값을 비교할 다음 요소가 존재하지 않기 때문에, if문을 통해 요소 값을 비교할 필요가 없다.
if pick_ls[i] == pick_ls[i+1]: # 근접한 인형이 같은 종류인 경우를 찾아내는 조건
pick_ls.pop(i)
pick_ls.pop(i)
count_af = count_af -2
i = 0
else:
i += 1
answer = count_bf - count_af # 터트려져 사라지기 전 인형의 수 - 터트려져 사라진 후 인형의 수 = 터트려져 사라진 인형의 개수
return answer
print(solution([[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]],[1,5,3,5,1,2,1,4]))
# review
-
읽는 사람들이 쉽게 이해할 수 있는 코딩의 중요성을 깨달았다. 주석을 통해 생략된 설명을 덧붙이기, 직관적으로 식별할 수 있는 변수명 짓기 등을 적극적으로 활용하도록 하자. 간혹, 본인이 직접 쓴 코드를 이해하지 못하는 웃픈 상황이 발생할 수도 있기 때문이다.
-
while
문은 조건식이 충족될 때까지 무한 반복된다. 당연히 무한 반복 시에는, while 문과 동일 선상에 있는 하단의 코드가 실행될 수 없다.
try:
i = 0
while board[i][x-1] == 0: 수'로 지정
# print('!!!')
i += 1
pick_it = board[i].pop(x-1) # while문의 반복이 멈추기 전까지, 하단의 pop()과 append()는 실행될 수 없다.
pick_ls.append(pick_it)
board[i].insert(x-1, 0)
except IndexError:
continue
-
continue
와break
의 차이점-
continue
: 다음 loop로 넘어갈 때 사용한다(보통 for문에서 사용) -
break
: loop를 중단할 때 사용한다(보통 for문에서 사용)
-
-
리스트 조작 시
IndexError
가 발생하는 경우-
리스트 내부 인접 요소의 값을 비교하는 경우
-
while문
을 활용하여 인덱스 i 값을 변화식으로 증가시키는 경우
-
i = 0
while board[i][x-1] == 0:
# print('!!!')
i += 1
Author And Source
이 문제에 관하여(TIL - algorithm - 03), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@fcfargo/TIL-algorithm-03저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)