-
[문제풀이 후기] 프로그래머스 #120861 - 캐릭터의 좌표문제풀이/Programmers 2026. 1. 22. 19:00
https://school.programmers.co.kr/learn/courses/30/lessons/120861
기본 상위 코드
const keyInput = ["left", "right", "up", "right", "right"]; const board = [11, 11]; const [xLimit, yLimit] = board.map((value) => Math.floor(value / 2)); // x, y 최대값 let [x, y] = [0, 0]; // 최종 x, y 좌표첫 번째 시도 (결과 : 실패)
접근 방식
1. 좌우 / 상하 요소 필터링
2. left / right 요소 개수 차이, up / down 요소 개수 차이 계산
3. 차이 값을 기준으로 x, y 좌표 계산const xKeyInput = keyInput.filter((key) => key === "left" || key === "right"); const yKeyInput = keyInput.filter((key) => key === "up" || key === "down"); const xValue = xKeyInput.filter((key) => key === "right").length - xKeyInput.filter((key) => key === "left").length; const yValue = yKeyInput.filter((key) => key === "up").length - yKeyInput.filter((key) => key === "down").length; x = xValue > 0 ? Math.min(xValue, xLimit) : Math.max(xValue, -xLimit); y = yValue > 0 ? Math.min(yValue, yLimit) : Math.max(yValue, -yLimit); return [x, y];실패 원인
: 최대값 이후 로직 구현 누락
( 반례 : ["left", "left", "left", "right", "right", "right"], [5, 5] => [0, 0] ( 기대값: [1, 0] ) )
두 번째 시도 (결과 : 실패)
접근 방식
1. x 또는 y 가 최소/최대값에 도달 시 continue
for (let i = 0; i < keyInput.length; i++) { if (x === xLimit || x === -xLimit || y === yLimit || y === -yLimit) continue; switch (keyInput[i]) { case "right": x++; break; case "left": x--; break; case "up": y++; break; case "down": y--; break; } } return [x, y];실패 원인
: 최소/최대값에 최초로 도착한 이후 모든 로직이 continue 처리됨
( 반례 : ["left", "left", "right", "right"], [5, 5] => [-2, 0] ( 기대값: [0, 0] ) )
세 번째 시도 (결과 : 성공)
접근 방식
1. 각 방향마다 조건식 적용
2. 각 방향의 최소/최대값에 도착하지 않았을 때만 동작for (let i = 0; i < keyInput.length; i++) { switch (keyInput[i]) { case "right": if (x !== xLimit) x++; break; case "left": if (x !== -xLimit) x--; break; case "up": if (y !== yLimit) y++; break; case "down": if (y !== -yLimit) y--; break; } } return [x, y];후기
문제를 잘 보고 테스트를 많이 해보자
'문제풀이 > Programmers' 카테고리의 다른 글
[문제풀이 후기] 프로그래머스 #120866 - 안전지대 (0) 2026.01.23 [문제풀이 후기] 프로그래머스 #120863 - 다항식 더하기 (0) 2026.01.22 [문제풀이 후기] 프로그래머스 #120831 - 짝수의 합 (0) 2026.01.09 [문제풀이 후기] 프로그래머스 #120808 - 분수의 덧셈 (0) 2026.01.07 [문제풀이 후기] 프로그래머스 #181832 - 정수를 나선형으로 배치하기 (0) 2026.01.07