728x90
300x250
https://www.acmicpc.net/problem/1730
로봇 팔을 움직이는대로 목판 조각을 하는 알고리즘
로직은 제대로 돌아가는데 이상하게 런타임에러가 자꾸 나는 것이였다..
NoSuchElementException...
보통 해당 오류가 발생하는 case는 더 이상 입력이 주어지지 않는데, 계속 읽어들일려고 할 때다.
https://help.acmicpc.net/judge/rte/NoSuchElement
위의 예시를 보면 이해가 잘 갈것이다.
암튼.. 로봇팔의 움직임이 없는경우 그냥 " " 공백으로 2번째줄이 들어가게되는데,
그때의 경우를 고려하지 않았기때문에 계속 오류가 났던것..
<체크포인트>
BufferedReader의 br.readLine()가 Null이 아닌지?
StringTokenizer의 nextToken()을 수행하기 전, StringTokenizer가 값을 가지고 있는지? (hasMoreElements())
st = new StringTokenizer(sbr);
if(st.hasMoreElements())
str = st.nextToken();
암튼 이러저러해서 코드는 끝이났다.
import java.io.BufferedReader;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Arrays;
import java.util.StringTokenizer;
public class Main {
public static void main(String[] args) throws IOException {
// TODO Auto-generated method stub
//System.setIn(new FileInputStream("Test.txt"));
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st = new StringTokenizer(br.readLine());
//입력
int N = Integer.parseInt(st.nextToken());
char pan[][] = new char[N][N];
for (int i = 0; i < N; i++) {
for (int j = 0; j < N; j++) {
// Arrays.fill(pan[i],'.');
pan[i][j]='.';
}
}
String sbr = br.readLine();
String str = "";
if (sbr!= null) {
st = new StringTokenizer(sbr);
if(st.hasMoreElements())
str = st.nextToken();
}
int x = 0;
int y = 0;
// 움직임 시작
for (int i = 0; i < str.length(); i++) {
//1. 방향 확인
char dir = str.charAt(i);
//2. 좌표 벗어나는지 체크
int nx = x;
int ny = y;
//이동
if(dir=='U') {
nx -=1;
} else if (dir == 'D') {
nx +=1;
} else if (dir == 'L') {
ny -=1;
} else if (dir == 'R') {
ny +=1;
}
if(nx < 0 || nx >= N || ny < 0 || ny >= N) {
continue;
}
//3. 현재위치 움직임 표시
//3-1. 수직/수평/수직+수평 확인
if((pan[x][y]=='|' && (dir =='R' || dir == 'L'))
|| (pan[x][y]=='-' && (dir =='U' || dir == 'D'))) {
pan[x][y] = '+';
} else if(pan[x][y]=='.' && (dir =='R' || dir == 'L')) {
pan[x][y] = '-';
} else if(pan[x][y]=='.' && (dir =='U' || dir == 'D')) {
pan[x][y] = '|';
}
//4. 이동한 위치 움직임 표시
if((pan[nx][ny]=='|' && (dir =='R' || dir == 'L'))
|| (pan[nx][ny]=='-' && (dir =='U' || dir == 'D'))) {
pan[nx][ny] = '+';
} else if(pan[nx][ny]=='.' && (dir =='R' || dir == 'L')) {
pan[nx][ny] = '-';
} else if(pan[nx][ny]=='.' && (dir =='U' || dir == 'D')) {
pan[nx][ny] = '|';
}
//5. 현재위치 좌표 이동
x= nx;
y= ny;
}
for (int i = 0; i < N; i++) {
for (int j = 0; j < N; j++) {
System.out.print(pan[i][j]);
}
System.out.println();
}
}
}
728x90
'알고리즘 > 그 외' 카테고리의 다른 글
백준 2817번: ALPS식 투표 - [구현][정렬] (0) | 2023.06.16 |
---|---|
백준 2840번: 행운의 바퀴 [구현][시뮬레이션] - Java (2) | 2023.06.13 |
백준 10250번: ACM 호텔 [구현][탐색][시뮬레이션] - Java (0) | 2023.05.22 |
[알고리즘] 시간복잡도 logN, N*logN 이해하기 (스크랩) (0) | 2023.04.25 |
백준 11005번: 진법 변환2 [구현] -Java (0) | 2023.04.23 |