상세 컨텐츠

본문 제목

프로그래머스 / 크레인 인형뽑기 게임 / level 1 / 파이썬

소프트웨어/자료구조 + 알고리즘

by moonionn 2021. 3. 21. 00:28

본문

programmers.co.kr/learn/courses/30/lessons/64061

 

코딩테스트 연습 - 크레인 인형뽑기 게임

[[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] 4

programmers.co.kr

 

문제가 뭔가 복잡해보이지만 로직은 간단합니다.

moves 리스트가 끝날 때까지 board를 돌고,

뽑힌 인형은 새로운 스택을 생성해 그곳에 담습니다.

같은 인형 두 개가 겹치면 스택에서 그 두 인형을 제거합니다.

 

나의 풀이

해설

우선 뽑힌 인형을 담아줄 스택을 생성합니다.

def solution(board, moves):
    answer = 0
    bucket = []

 

순서대로 크레인의 움직임 위치를 받습니다.

크레인의 위치를 받으면 2차원 배열의 가장 첫 배열(상단 배열)부터 

인형의 유무를 체크합니다.

for move in moves:
    for line in board:
        if line[move-1] != 0:
        # move는 1부터 칸 전체 길이 까지의 숫자입니다.
        # 따라서 list의 index로 사용하려면 1을 빼줘야 합니다.

 

크레인의 위치에 인형이 있다면

스택에 인형을 넣어주고 해당 위치는 인형이 없는 상태인 0으로 바꿔줍니다.

인형을 찾은 뒤 굳이 남은 아래칸들을 뒤질 필요가 없으니

for문에서 나가기 위해 break를 겁니다.

for move in moves:
    for line in board:
        if line[move-1] != 0:
            bucket.append(line[move-1])
            line[move-1] = 0
            break

 

인형을 하나 뽑을때마다 스택에 겹치는 인형이 있는지 확인해줘야 합니다.

이 때 스택에 인형이 두 개 이상 쌓였는지 먼저 체크하지 않으면 런타임 에러가 날 수 있습니다.

if len(bucket) >= 2 and bucket[-1] == bucket[-2]:
    answer += 2
    bucket = bucket[:-2]

 

전체 코드

def solution(board, moves):
    answer = 0
    bucket = []
    
    for move in moves:
        for line in board:
            if line[move-1] != 0:
                bucket.append(line[move-1])
                line[move-1] = 0
                break

        if len(bucket) >= 2 and bucket[-1] == bucket[-2]:
            answer += 2
            bucket = bucket[:-2]
            
    return answer

 

관련글 더보기

댓글 영역