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를 "이동"하는 것이기 때문에 거리값을 의미하는 거니까 절댓값을 생각했어요
그랬더니 정답이더라구요!!
이렇게 해서 문제 풀었답니다.
'문제 풀기 > 프로그래머스' 카테고리의 다른 글
[프로그래머스] 종이 자르기 (0) | 2025.01.09 |
---|---|
[프로그래머스] 외계어 사전 (set()함수) (0) | 2025.01.08 |
[프로그래머스] 구슬을 나누는 경우의 수 (from math import factorial) (0) | 2025.01.08 |
[프로그래머스] 삼각형의 완성 조건 (2) (0) | 2025.01.08 |
[프로그래머스] 문자열 계산하기 (eval() 함수) (0) | 2025.01.06 |