본문 바로가기
Algorithm/programmers

programmers 크레인 인형뽑기 게임

by 갈잃자 2022. 8. 9.

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

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr


19년도 카카오 겨울 인턴쉽 문제이다.

 

문제를 보면 이차원 배열에 크레인으로 인형을 뽑아 하나의 바구니에 넣는데, 바구니에 같은 인형이 연속으로 두개 이상 붙어있다면, 인형이 애니팡처럼 터진다.

 

터진 인형의 갯수를 구하는데, 나의 인형을 전부 뽑아, arr(바구니)에 한줄로 저장한 후,

 

2개이상 연속으로 나열되어 있는 녀석들을 while문을 돌며, 터트려준다

 

뭐.. 인형을 쌓으면서 터트리고, 갯수를 세는게 더 효율적일 수 있으나 한번에 터트리는 로직이 더 직관적으로 보기 좋을거 같다는 생각이 들어서 이렇게 짬

def solution(board, moves):
    answer = 0
    arr = []
    for i in range(len(moves)):
        a=moves[i]-1
        for x in range(len(board)): #가장 위의 인형을 뽑기 위해 for문을 돌려줌
            if board[x][a] !=0:
                arr.append(board[x][a])
                board[x][a] = 0
                break

            if x == len(board) -1: # 인형이 없는 인덱스로 왔다면
                break

    # 인형들을 arr에 전부 나열 후, while문을 돌려 붙어있는 녀석들을 터트린다!
    cnt = 0 # 터진횟수
    b = True # 탈출조건
    while b:
        check = 0
        for i in range(len(arr)-1):
            if arr[i] == arr[i+1]:
                arr.pop(i) #팡
                arr.pop(i) #팡
                cnt +=1
                check+=1 #전체바퀴를 돌며, 한번이라도 터진다면 또 다시 while문을 타게 끔 함!
                break
        if check ==0: # 더이상 연속되는 인형이 없다면
            b = False # while문 탈출시켜줌

    answer=cnt*2 # 터진 인형의 갯수를 구하는것 이므로, 두배를 해줌
    return answer

'Algorithm > programmers' 카테고리의 다른 글

programmers 비밀지도  (0) 2022.08.12
programmers 실패율  (0) 2022.08.10
programmers 키패드누르기  (1) 2022.08.03
programmers 숫자 문자열과 영단어  (0) 2022.08.02
programmers 신규 아이디 추천  (0) 2022.07.28

댓글