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

 

Level1 문제이고, 스스로 푼 문제다 

 

basket에서 top에 있는 수와 다른지를 확인해야하고, indexError를 피하기 위해서 인형이 아닌 -1을 먼저 basket의 인덱스 0으로 넣어놨다 

 

첫번째 문제

크레인이 임의로 움직이는 줄 알고, 그 움직임을 파악하기가 어려웠다 

근데 문제를 잘 읽어보니 크레인이 움직이는 열이 moves 리스트로 주어졌고, 그 열을 따라 아래로 움직이다가 인형을 발견하면 옮기는 것이었다 (문제를 꼼꼼히 읽자)

 

두번째 문제 

그래서 moves에 주어진 열의 행들을 조사하는데, 주어진 행렬은 모두 0부터 시작하는데, 문제에서는 열이 1부터 시작하므로 

주어진 열 -= 1을 하지 않아서 IndexError를 냈다 

 

세번째 문제 

처음에는 while문으로 해당 열에서 인형의 행을 구하려했는데 계속 IndexError가 나서 for문으로 바꿨더니 error 없이 81%까지 맞았다 

 

네번째 문제 

2 / 11 만큼 틀리는지 알려고 VsCode를 돌렸는데, 1열에서 인형이 없는데 1열로 움직이는 경우가 있는데 이것에 대한 

분류를 하지 않았다. 인형이 없으면 아무것도 하지 않는 로직을 만들어야 했다 

그래서 flag를 활용해서 flag가 True인 경우면 크레인을 실행하도록 했더니 정답이 떴다 

 

- 정답 풀이 :

def solution(board, moves):
    n = len(board)
    m = len(board[0])
    basket = [-1]
    count = 0
    
    for col in moves: #움직이는 열 
        row = 0
        col -= 1
        flag = False
        for row in range(n):
            if board[row][col] != 0:
                flag = True
                break   
        if not flag:
            continue        
        elif board[row][col] != basket[-1] :
            basket.append(board[row][col])
            board[row][col] = 0
        elif board[row][col] == basket[-1]:
            basket.pop()
            count += 2
            board[row][col] = 0
        
        
    return count

 

- 시도해본 풀이 :

81 / 100 에서 틀렸다

def solution(board, moves):
    n = len(board)
    m = len(board[0])
    basket = [-1]
    count = 0
    
    for col in moves: #움직이는 열 
        row = 0
        col -= 1
        for row in range(n):
            if board[row][col] != 0:
                break            
        if board[row][col] != basket[-1]:
            basket.append(board[row][col])
        else:
            basket.pop()
            count += 2
        board[row][col] = 0
        print(basket)
        
    return count

+ Recent posts