

-Code
import java.io.*;
public class BOJ6693 {
public static void main(String[] args) throws IOException {
BufferedReader br =
new BufferedReader(new InputStreamReader(System.in));
while (true) {
String input = br.readLine();
if (input.equals("END")) {
break;
}
String[] moveList = input.replace(".", "").split(",");
double[] pos = getPos(moveList);
double dist = Math.sqrt(pos[0] * pos[0] + pos[1] * pos[1]);
System.out.println(
String.format(
"You can go to (%.3f,%.3f), the distance is %.3f steps.",
pos[0],
pos[1],
dist
)
);
}
br.close();
}
private static double[] getPos(String[] moveList) {
double[] answer = {0, 0};
double cross = Math.sqrt(2);
for (String move : moveList) {
// 숫자 끝나는 위치 구하기
int numIdx = 0;
while (numIdx < move.length() && (Character.isDigit(move.charAt(numIdx)))) {
numIdx++;
}
// 거리와 방향 셋팅
double dist = Double.parseDouble(move.substring(0, numIdx));
String dir = move.substring(numIdx);
// 방향에 따른 위치 변경
if (dir.equals("N")) {
answer[1] += dist;
} else if (dir.equals("NE")) {
answer[1] += dist / cross;
answer[0] += dist / cross;
} else if (dir.equals("E")) {
answer[0] += dist;
} else if (dir.equals("SE")) {
answer[0] += dist / cross;
answer[1] -= dist / cross;
} else if (dir.equals("S")) {
answer[1] -= dist;
} else if (dir.equals("SW")) {
answer[0] -= dist / cross;
answer[1] -= dist / cross;
} else if (dir.equals("W")) {
answer[0] -= dist;
} else if (dir.equals("NW")) {
answer[1] += dist / cross;
answer[0] -= dist / cross;
}
}
return answer;
}
}
배열로 값을 변경하다보니 오차가 있었고 대각선인 경우 비율을 직접 계산을 해줘야 하는 부분을 인지 못해서 해당 부분을 수정하니 해결했습니다.
'Beakjoon&프로그래머스 > Java' 카테고리의 다른 글
| [백준/Java] 20920번 영단어 암기는 괴로워 (0) | 2026.02.16 |
|---|---|
| [백준/Java] 10431번 줄세우기 (0) | 2026.02.16 |
| [백준/Java] 16967번 배열 복원하기 (0) | 2026.02.15 |
| [백준/Java] 15803번 PLAYERJINAH’S BOTTLEGROUNDS (0) | 2026.02.14 |
| [백준/Java] 4201번 Snakes and Ladders (0) | 2026.02.14 |