내가 푼 코드)
Scanner sc = new Scanner(System.in);
int N = sc.nextInt(); //공간의 크기 N
ArrayList<String> list = new ArrayList<String>(); //이동할 방향이 담긴 리스트
int[] pointX = {1}; //초기 X 좌표(행)
int[] pointY = {1}; //초기 Y 좌표(열)
//이동 가능한 횟수(1~100)
for(int i=0;i<100;i++) {
String move = sc.next(); //이동할 방향(상,하,좌,우)
if(move.equals("End")) break;
list.add(move);
}
//이동 시작
for(int i=0;i<list.size();i++) {
if(list.get(i).equals("R")) { //열증가(오른쪽으로 1칸이동)
if(pointY[0]+1>N) { //좌표평면 밖을 넘어갈 경우
continue;
}
pointY[0] += 1; // Y좌표 1증가
}else if(list.get(i).equals("L")) { //열감소(왼쪽으로 1칸이동)
if(pointY[0]-1<1) { //좌표평면 밖을 넘어갈 경우
continue;
}
pointY[0] -= 1; // Y좌표 1감소
}else if(list.get(i).equals("U")) { //행감소(위쪽으로 1칸이동)
if(pointX[0]-1<1) { //좌표평면 밖을 넘어갈 경우
continue;
}
pointX[0] -= 1; // X좌표 1감소
}else{//행증가(아래쪽으로 1칸이동)
if(pointX[0]+1>N) { //좌표평면 밖을 넘어갈 경우
continue;
}
pointX[0] += 1; // X좌표 1증가
}
}
System.out.println("최종 X좌표:"+pointX[0]);
System.out.println("최종 Y좌표:"+pointY[0]);
시작 좌표를 배열에 담을 필요가 없었는데... 요구사항을 잘 읽고 문제에 나와있는 데로 풀기
다른 코드)
Scanner sc = new Scanner(System.in);
// 공간의 크기 N 입력받기
int n = sc.nextInt();
sc.nextLine();
// 이동할 방향들을 공백 단위로 입력받아서 배열에 넣음
String[] plans = sc.nextLine().split(" ");
int x=1,y=1; // 시작좌표 설정 (X - 행 , Y - 열)
int[] dx = {0,0,-1,1}; //U,D(행이동)
int[] dy = {-1,1,0,0}; //L,R(열이동)
char[] moveTypes = {'L','R','U','D'}; // 이동 방향 타입
//입력받은 뱡향만큼 for문을 돔
for(int i=0;i<plans.length;i++) {
//plans 라는 문자열 배열에서 인덱스 번호에 해당되는 문자를 가져옴
char plan = plans[i].charAt(0);
int nx = 0,ny = 0; // 이동후 좌표값
for(int j=0;j<moveTypes.length;j++) {
if(plan == moveTypes[j]) {
nx = x + dx[j];
ny = y + dy[j];
break;
}
}
//좌표 공간을 벗어나는 경우
if(nx<1 || ny<1 || nx > n || ny > n) continue;
//이동 진행
x = nx;
y = ny;
}
System.out.println(x+" "+y);
nextInt() 메소드는 엔터 전까지 입력받기 때문에 nextLine() 메서드를 한번 더 써서 Enter값을 없애고 새롭게 값을 입력받을 수 있도록 함
'알고리즘&자료구조' 카테고리의 다른 글
이코테 - 게임개발 (0) | 2021.01.26 |
---|---|
이코테 - 왕실의 나이트 (0) | 2021.01.24 |
이코테 - 숫자카드게임 (0) | 2021.01.19 |
1517 버블소트 (1) | 2020.09.27 |
1037 약수 (0) | 2020.09.18 |