문제:
좌표평면 위 (0, 0)에서 북쪽을 향한 상태에서 움직이는 것을 시작하려 합니다.
N개의 명령에 따라 총 N번 움직이며, 명령 L이 주어지면 왼쪽으로 90도 방향 전환을,
명령 R이 주어지면 오른쪽으로 90도 방향전환을 하고, 명령 F가 주어지면
바라보고 있는 방향으로 한칸 이동하려고 합니다.
1초에 한 칸씩 움직이며, 회전에도 1초의 시간이 걸린다 했을 때,
몇 초 뒤에 처음으로 다시 (0, 0)에 돌아오게 되는지를 판단하는 프로그램을 작성해보세요.
첫 번째 줄에 다시 시작점으로 되돌아오는 데 걸리는 시간을 출력합니다.
만약 N번 이동을 진행했는데도 시작점으로 돌아오지 못했다면 -1을 출력합니다.
코드:
package back;
import java.util.*;
public class Main {
public static int time = 0;;
public static int x = 0;
public static int y = 0;
public static String text;
public static int [] dx = new int[]{0,1,0,-1};
public static int [] dy = new int[]{1,0,-1,0};
public static boolean Move(int n) {
int dirNum = 0;
for(int i=0;i<n;i++) {
char a = text.charAt(i);
if(a == 'L') {
dirNum = (dirNum+3)%4;
}else if(a == 'R') {
dirNum = (dirNum+1)%4;
}else {
x = x+dx[dirNum];
y = y+dy[dirNum];
}
time++;
if(x == 0 && y == 0) {
return true;
}
}
return false;
}
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
text = sc.next();
if(Move(text.length())) {
System.out.println(time);
}else {
System.out.println(-1);
}
}
}
'Java > 실습' 카테고리의 다른 글
[Java] 체크판위에서 2 (2) | 2022.07.21 |
---|---|
[Java] 배열 임의의 위치 원소 추가/제거 메서드 구현 (0) | 2022.07.20 |
[Java] 빙빙 돌며 숫자 사각형 채우기 (0) | 2022.07.19 |
[Java] 부분 문자열 찾기 (0) | 2022.07.18 |
[Java] 잔해물을 덮기 위한 사각형의 최소 넓이 (0) | 2022.07.17 |