[프로그래머스] 크레인 인형뽑기 게임 - level 1 (python,파이썬)

ggoggori_._·2021년 1월 4일
0

프로그래머스

목록 보기
4/7

https://programmers.co.kr/learn/courses/30/lessons/64061#

문제가 너무 길어서... 문제는 생략!

def solution(board, moves):
    stack = [0]
    answer = 0 
    for j in moves:
        j=j-1
        
        for i in range(len(board)):
            if board[i][j]==0:
                continue

            else:
                
                if stack[-1] == board[i][j]:
                    del stack[-1]
                    answer +=2
                    board[i][j] = 0
                    break
                else:
                    stack.append(board[i][j])
                    board[i][j]=0
                    break
                        
                        
                
            
    return answer

전체적인 구조만 살펴본다면

    for j in moves:
        
        for i in range(len(board)):
            if board[i][j]==0:
                continue

            else:
                
                if stack[-1] == board[i][j]:
                    del stack[-1]
                    break
                else:
                    stack.append(board[i][j])
                    break

보통 2차원 배열문제는 앞선 for문에서 행에 접근하는 경우가 많은데 이 문제는 앞선 for문에서 열로 접근해야 편한 것 같다. 위 코드에서 몇 가지만 추가하면 문제의 정답을 맞출 수 있다.


    for j in moves:
    	j=j-1

주어진 moves 배열을 for문으로 원소마다 순회한다.
j = j-1로 한 이유는 리스트 인덱싱 할 때 단위가 헷갈려서 0부터 시작하게 바꿔줬다.


        for i in range(len(board)):
        	if board[i][j]==0:
            	continue

moves for문 안의 중첩된 for문이다.
행에 접근하면서 board[i][j]가 0이라면 비어있는 인형 칸이기 때문에 다음 원소를 찾게 continue를 사용했다.


            else:
                
                if stack[-1] == board[i][j]:
                    del stack[-1]
                    answer +=2
                    board[i][j] = 0
                    break
                else:
                    stack.append(board[i][j])
                    board[i][j]=0
                    break

else 에서는 board[i][j] != 0인 원소에 접근하게 된다.
그러면 여기에 다다른 원소는 빈칸이 아니고 실제로 인형이 있는 곳이다!
stack의 마지막과 board[i][j]가 같다면 stack의 마지막에 있는 원소를 제거해주고,
answer에 2를 추가해준다.
(인형이 2개가 사라지는 것이기 때문에 2를 추가..! 계속 answer += 1 했다가 오류 찾는데 오래걸렸다...)


만약 stack[-1] != board[i][j] 라면
stack에 해당 원소를 추가해준다.

2차원 배열에 대한 이해와 stack 자료구조에 대한 이해가 있어야 풀 수 있는 문제로 조금 어려웠당!

0개의 댓글