def solution(keyinput, board):
    len_x = board[0]//2
    len_y = board[1]//2
    
    direction = {"up":(0,1), "down":(0,-1),
                "left":(-1,0), "right":(1,0)}
    x,y = 0,0
    
    for i in keyinput:
        direction_x, direction_y = direction[i]
        if abs(x+direction_x) > len_x or abs(y+direction_y) > len_y:
            continue
        
        else:
            x,y = (x+direction_x),(y+direction_y)
        
    return [x,y]

 

🤔 문제 풀이

  • len_x = board[0]//2
    len_y = board[1]//2
    • board판의 정가운데에서 출발하기 때문에 x와 y의 길이를 할당시켜 주었어요
  • direction = {"up":(0,1), "down":(0,-1),
                        "left":(-1,0), "right":(1,0)}
    • 그리고 문제에서 준 조건들을 딕셔너리로 정리해 주었어요
  • x, y = 0,0
    • x, y를 각각 0으로 할당시켜 주고
  • for i in keyinput:
          direction_x, direction_y = direction[i]
          if abs(x+direction_x) > len_x or abs(y+direction_y) > len_y:
                continue
    • 방향이 적혀있는 keyinput을 for문으로 돌려줘요
    • 그리고 x와 y에 대한 값을 딕셔너리의 value 값과 할당해 줘요 (direction_x, direction_y)
    • 만약 x값이 board판 크기를 이탈하거나, y값이 board판 크기를 이탈할 때 계속 if문을 돌려주도록 했어요(continue)
  • else:
            x, y = (x+direction_x),(y+direction_y)
    • 만약 board판을 이탈하지 않는 값이라면 x, y에 할당되도록 해주고 return하면 문제 해결!

 

다른 풀이 

def solution(keyinput, board):
    x, y =0, 0
    for i in keyinput:
        if i == "left" and x>-board[0]//2+1: x += -1
        elif i == "right" and x<board[0]//2: x += 1
        elif i == "down" and y>-board[1]//2+1: y += -1
        elif i == "up" and y<board[1]//2: y += 1
    return x, y

 

x 좌표 조건문 두 개랑 y 좌표 조건문 두 개를 해서 풀 수 있어요

각각 양수일 때와 음수일 때의 조건을 가진 코드입니다!

 

음수일 때는 값이 더 작아지기 때문에, +1을 해주어야 원하는 결괏값이 나와요


실패 흔적들 

1트

#1트
def solution(keyinput, board):
    len_x = board[0]//2
    len_y = board[1]//2
    
    direction = {"up":(0,1), "down":(0,-1),
                "left":(-1,0), "right":(1,0)}
    x,y = 0,0
    
    for i in keyinput:
        direction_x, direction_y = direction[i]
        
    return [x,y]

 

처음에 문제를 보자마자 딕셔너리를 생각해서 매칭을 해주긴 했어요

근데 그 이후로 for문을 완성시키지 못해서 애먹었답니다 🥲

 

for i in keyinput:
        direction_x, direction_y = direction[i]

 

이 코드를 한참 바라보면서 튜터님이 그려주신 x,y 좌표를 분석했어요

제가 캐릭터가 되어서 이동한다고 상상했거든요

 

2트

#2트
def solution(keyinput, board):
    len_x = board[0]//2
    len_y = board[1]//2
    
    direction = {"up":(0,1), "down":(0,-1),
                "left":(-1,0), "right":(1,0)}
    x,y = 0,0
    
    for i in keyinput:
        direction_x, direction_y = direction[i]
        if (x+direction_x) > len_x or (y+direction_y) > len_y:
            continue
        
        else:
            x,y = (x+direction_x),(y+direction_y)
        
    return [x,y]

 

두 번째로 완성한 코드예요

 

    x,y = 0,0
    
for i in keyinput:
    direction_x, direction_y = direction[i]
    if (x+direction_x) > len_x or (y+direction_y) > len_y:
        continue
        
    else:
        x,y = (x+direction_x),(y+direction_y)

 

이렇게가 추가된 코드예요

 

if (x+direction_x) > len_x or (y+direction_y) > len_y:
        continue

 

만약 x값이 board판 크기를 이탈하거나, y값이 board판 크기를 이탈할 때 계속 if문을 돌려주도록 했어요

왜냐면

x와 y값이 board판 크기를 이탈하면 안 되거든요

 

else:
    x,y = (x+direction_x),(y+direction_y)

 

만약 x, y값이 board판 크기보다 작으면 x, y = 0,0에 할당되도록 해주었어요

 

하지만, 모든 걸 해결해내지는 못했죠 ^-^7

 

-4가 나와야 하는데 -5가 나오더라고요,, 하하하

 

3트

#3트
def solution(keyinput, board):
    len_x = board[0]//2
    len_y = board[1]//2
    
    direction = {"up":(0,1), "down":(0,-1),
                "left":(-1,0), "right":(1,0)}
    x,y = 0,0
    
    for i in keyinput:
        direction_x, direction_y = direction[i]
        if abs(x+direction_x) > len_x or abs(y+direction_y) > len_y:
            continue
        
        else:
            x,y = (x+direction_x),(y+direction_y)
        
    return [x,y]

 

최종 코드예요

 

    x,y = 0,0
    
    for i in keyinput:
        direction_x, direction_y = direction[i]
        if abs(x+direction_x) > len_x or abs(y+direction_y) > len_y:
            continue

 

절댓값(abs())을 씌워줬어요

양수 + 음수일 때랑, 음수 + 음수일 때 값이 달라지는 거 같더라고요

그래서

어차피 x와 y를 "이동"하는 것이기 때문에 거리값을 의미하는 거니까 절댓값을 생각했어요

 

그랬더니 정답이더라구요!!

이렇게 해서 문제 풀었답니다.

+ Recent posts