반응형
- 알고리즘 분류 : 구현
- 사용 언어 : JAVA
- 문제 요점
- 킹과 돌의 좌표를 알파벳과 숫자를 숫자 좌표로 변환해 저장
- 명령 개수만큼 입력된 이동 명령을 하나씩 처리하며 move() 함수를 호출
- 이동 명령에 따라 킹의 다음 위치를 계산하고, 보드 밖이면 무시
- 킹이 돌과 겹치는 위치로 이동하려 할 경우, 돌도 같은 방향으로 밀 수 있는지 확인
- 이동이 유효할 경우 킹과 돌의 위치를 갱신하고, 마지막에 알파벳+숫자 형식으로 출력
import java.util.Scanner;
public class Main {
static int kingX, kingY;
static int stoneX, stoneY;
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
String[] input = sc.nextLine().split(" ");
String kingPos = input[0];
String stonePos = input[1];
int n = Integer.parseInt(input[2]);
kingX = kingPos.charAt(0) - 'A' + 1;
kingY = kingPos.charAt(1) - '0';
stoneX = stonePos.charAt(0) - 'A' + 1;
stoneY = stonePos.charAt(1) - '0';
for (int i = 0; i < n; i++) {
String cmd = sc.nextLine();
move(cmd);
}
System.out.println((char) (kingX + 'A' - 1) + "" + kingY);
System.out.println((char) (stoneX + 'A' - 1) + "" + stoneY);
}
public static void move(String dir) {
int dx = 0, dy = 0;
switch (dir) {
case "R": dx = 1; break;
case "L": dx = -1; break;
case "B": dy = -1; break;
case "T": dy = 1; break;
case "RT": dx = 1; dy = 1; break;
case "LT": dx = -1; dy = 1; break;
case "RB": dx = 1; dy = -1; break;
case "LB": dx = -1; dy = -1; break;
}
int tempKingX = kingX + dx;
int tempKingY = kingY + dy;
if (tempKingX < 1 || tempKingY < 1 || tempKingX > 8 || tempKingY > 8) {
return;
}
if (tempKingX == stoneX && tempKingY == stoneY) {
int tempStoneX = stoneX + dx;
int tempStoneY = stoneY + dy;
if (tempStoneX < 1 || tempStoneY < 1 || tempStoneX > 8 || tempStoneY > 8) {
return;
}
stoneX = tempStoneX;
stoneY = tempStoneY;
}
kingX = tempKingX;
kingY = tempKingY;
}
}
반응형
'Algorithm' 카테고리의 다른 글
[BAEKJOON] 13032번 : ABCDE(JAVA) (1) | 2025.05.06 |
---|---|
[BAEKJOON] 14940번 : 쉬운 최단거리 (JAVA) (1) | 2025.05.05 |
[Programmers] 선물 주고받기 계산 (Java) (0) | 2025.04.27 |
[BAEKJOON] 7569번 : 토마토 (JAVA) (1) | 2024.02.18 |
[BAEKJOON] 2580번 : 스도쿠 (JAVA) (0) | 2024.01.14 |
반응형
- 알고리즘 분류 : 구현
- 사용 언어 : JAVA
- 문제 요점
- 킹과 돌의 좌표를 알파벳과 숫자를 숫자 좌표로 변환해 저장
- 명령 개수만큼 입력된 이동 명령을 하나씩 처리하며 move() 함수를 호출
- 이동 명령에 따라 킹의 다음 위치를 계산하고, 보드 밖이면 무시
- 킹이 돌과 겹치는 위치로 이동하려 할 경우, 돌도 같은 방향으로 밀 수 있는지 확인
- 이동이 유효할 경우 킹과 돌의 위치를 갱신하고, 마지막에 알파벳+숫자 형식으로 출력
import java.util.Scanner;
public class Main {
static int kingX, kingY;
static int stoneX, stoneY;
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
String[] input = sc.nextLine().split(" ");
String kingPos = input[0];
String stonePos = input[1];
int n = Integer.parseInt(input[2]);
kingX = kingPos.charAt(0) - 'A' + 1;
kingY = kingPos.charAt(1) - '0';
stoneX = stonePos.charAt(0) - 'A' + 1;
stoneY = stonePos.charAt(1) - '0';
for (int i = 0; i < n; i++) {
String cmd = sc.nextLine();
move(cmd);
}
System.out.println((char) (kingX + 'A' - 1) + "" + kingY);
System.out.println((char) (stoneX + 'A' - 1) + "" + stoneY);
}
public static void move(String dir) {
int dx = 0, dy = 0;
switch (dir) {
case "R": dx = 1; break;
case "L": dx = -1; break;
case "B": dy = -1; break;
case "T": dy = 1; break;
case "RT": dx = 1; dy = 1; break;
case "LT": dx = -1; dy = 1; break;
case "RB": dx = 1; dy = -1; break;
case "LB": dx = -1; dy = -1; break;
}
int tempKingX = kingX + dx;
int tempKingY = kingY + dy;
if (tempKingX < 1 || tempKingY < 1 || tempKingX > 8 || tempKingY > 8) {
return;
}
if (tempKingX == stoneX && tempKingY == stoneY) {
int tempStoneX = stoneX + dx;
int tempStoneY = stoneY + dy;
if (tempStoneX < 1 || tempStoneY < 1 || tempStoneX > 8 || tempStoneY > 8) {
return;
}
stoneX = tempStoneX;
stoneY = tempStoneY;
}
kingX = tempKingX;
kingY = tempKingY;
}
}
반응형
'Algorithm' 카테고리의 다른 글
[BAEKJOON] 13032번 : ABCDE(JAVA) (1) | 2025.05.06 |
---|---|
[BAEKJOON] 14940번 : 쉬운 최단거리 (JAVA) (1) | 2025.05.05 |
[Programmers] 선물 주고받기 계산 (Java) (0) | 2025.04.27 |
[BAEKJOON] 7569번 : 토마토 (JAVA) (1) | 2024.02.18 |
[BAEKJOON] 2580번 : 스도쿠 (JAVA) (0) | 2024.01.14 |