연습장

16. 크레인 인형뽑기 게임 본문

프로그래머스/1단계

16. 크레인 인형뽑기 게임

js0616 2024. 1. 17. 08:20

 

 

 

맨위에서부터 뽑을 수 있으며 뽑은 인형중 같은거 2개가 될경우 사라진다. 

 

 

 

 

moves 의 원소값에 따라서 0 이 아닌 숫자를 하나씩 가져오게된다. 

   15351214

->43113204 

 

가 되며 연속된 숫자는 사라지게되며 0 또한 무시해도된다.

-> 43324

-> 424

 

즉 11과 33 이 사라졌으며 result 값은 4가 된다. 

 


 

1. 빈배열에 원소들을 잘 뽑아서 넣기

2. 몇개가 터트려지는지 확인

 


def solution(board, moves):
    answer = 0
    num_list = []
    
    # 1회 뽑는 방법
    h = 0 # 높이
    w = 0 # 뽑을 x 축 좌표 
    while True:
        if board[h][w] == 0: # 0 일경우 한칸 더 내려감
            h +=1
        else :
            num_list.append(board[h][w]) 
            board[h][w] = 0
            break
        
    print(num_list) # 4


    return answer

 

num_list 에 4가 들어가게 된다.

 


def solution(board, moves):
    answer = 0
    num_list = []
    
    # 1회 뽑는 방법
    h = 0
    w = 0
    
    # moves 원소만큼 뽑기를 진행
    for w in moves:
        
        # 높이를 다시 0 으로 초기화
        h = 0
        
        # 1개를 뽑을때 까지 진행
        # 빈곳일경우 무한 루프에 걸리지 않도록
        while h < len(board):    
            if board[h][w-1] == 0:
                h +=1
            else :
                num_list.append(board[h][w-1])
                board[h][w-1] = 0
                break
    
    print(num_list) ## 아래 결과
    
    
    return answer 

 

 

[4, 3, 1, 1, 3, 2, 4]

 


새로 만든 리스트에서 터트릴수 있는 숫자 갯수를 확인한다. 

 

방법은 같은숫자가 연속하는지 확인하면 된다.

 

 

   # 2. 갯수 확인 
    
    temp = -1
    
    for i in range(len(num_list)):
        if temp == num_list[i] :
            num_list = num_list[:i-1]+num_list[i+1:]
            answer += 2
            break
        else : 
            temp = num_list[i]

 

 

print(num_list) #  [4, 3, 3, 2, 4]

 

이제 위의 코드를 반복하면 되는데 모두 다 짝을 이뤄 터진다고 가정하면 전체 배열의 갯수 / 2 만큼은 반복 해야 된다. 

 


def solution(board, moves):
    answer = 0
    num_list = []
    
    # 1. 뽑기 
    h = 0
    w = 0
    
    # moves 원소만큼 뽑기를 진행
    for w in moves:
        
        # 높이를 다시 0 으로 초기화
        h = 0
        
        # 1개를 뽑을때 까지 진행
        # 빈곳일경우 무한 루프에 걸리지 않도록
        while h < len(board):    
            if board[h][w-1] == 0:
                h +=1
            else :
                num_list.append(board[h][w-1])
                board[h][w-1] = 0
                break

    # 2. 갯수 확인 
    
    # 전체 반복 횟수
    for j in range(int(len(num_list)/2)):
        
        # 임시 저장값 초기화
        temp = -1

        # 1회 확인
        for i in range(len(num_list)):
            if temp == num_list[i] :
                num_list = num_list[:i-1]+num_list[i+1:]
                answer += 2
                break
            else : 
                temp = num_list[i]

    
    return answer

'프로그래머스 > 1단계' 카테고리의 다른 글

18. 햄버거 만들기  (0) 2024.01.19
17. 키패드 누르기  (0) 2024.01.19
15. 이웃한 칸  (0) 2024.01.17
14. 둘만의 암호  (0) 2024.01.17
13. 실패율  (0) 2023.12.16