본문 바로가기

코딩테스트

프로그래머스 level0 캐릭터의 좌표

 

먼저 left,right는 col up,down은 row를 사용하여 얼만큼 이동했는지 변수를 사용하여 저장하였다.

그리고 max_col과 max_row를 사용하여 board에서 이동할수 있는 좌표의 한계를 지정하였다.

 

def solution(keyinput, board):
    row = 0
    col = 0
    max_row = (board[0] - 1) // 2
    max_col = (board[1] - 1) // 2
    for i in range(len(keyinput)):
        if(keyinput[i] == 'left'):
            row -= 1
        if(keyinput[i] == 'right'):
            row += 1
        if(keyinput[i] == 'up'):
            col += 1
        if(keyinput[i] == 'down'):
            col -= 1
    if row < -max_row:
        row = -max_row
    elif row > max_row:
        row = max_row
    
    if col < -max_col:
        col = -max_col
    elif col > max_col:
        col = max_col
    answer =[row,col]
    return answer

하지만 테스트케이스중에 빠트린 케이스가 있어서 확인을 해봤다.

3번 테스트에서 right > right > right > right > right > left 먼 결과값이 4,0이라고 생각했다. 하지만 max_col의 경계를 넘어갈수 없기때문에 3,0이 나와야 된다. 그래서 keyinput[i]에서 max_col과 max_row의 값을 넘어가지않게 수정하였다

def solution(keyinput, board):
    row = 0
    col = 0
    max_row = (board[1] - 1) // 2
    max_col = (board[0] - 1) // 2
    for i in range(len(keyinput)):
        if keyinput[i] == 'left' and col > -max_col:
            col -= 1
        elif keyinput[i] == 'right' and col < max_col:
            col += 1
        elif keyinput[i] == 'up' and row < max_row:
            row += 1
        elif keyinput[i] == 'down'and row > -max_row:
            row -= 1
    
    if col < -max_col:
        col = -max_col
    elif col > max_col:
        col = max_col
    
    if row < -max_row:
        row = -max_row
    elif row > max_row:
        row = max_row
    
    answer = [col, row]
    return answer

 

 

정답이다.