문제 : boj18242
몇x몇 짜리 사각형인지만 알면 어차피 정해진 위치에 빈 칸이 있으므로 연산을 통해 알아낼 수 있다. 이에 따라 로직을 다음과 같이 정해서 풀었다.
1. '#'이 처음 나온 줄을 찾는다. 찾은 줄에서 마지막 '#'과 첫번째 '#'의 차이를 통해 길이를 알아내고, 그 중간에 '.'이 있다면 UP 이다.
2. '1'에서 길이를 알아냈으므로 [해당 길이-2/2]만큼은 쓸모없으므로 입력을 버리고, 중앙 행을 찾는다. 여기서 좌측과 우측을 확인하여 LEFT, RIGHT를 알아낼 수 있고 마지막까지 갈 필요없이 아직까지 안나왔다면 DOWN을 출력하면 된다.
코드 : github
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.StringTokenizer;
public class Main {
private void solution() throws Exception {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st = new StringTokenizer(br.readLine());
int r = Integer.parseInt(st.nextToken());
int c = Integer.parseInt(st.nextToken());
int cs=0, cnt=0;
for (int i = 0; i < r; i++) {
String tmp = br.readLine();
if (tmp.indexOf('#') == -1) continue;
cs = tmp.indexOf('#');
cnt = 1;
for (int j = cs+1; j < c; j++) {
if (tmp.charAt(j) == '.') break;
cnt++;
}
if (cnt != tmp.lastIndexOf('#')-tmp.indexOf('#')+1) {
System.out.println("UP");
return;
}
break;
}
for (int i = 0; i < (cnt-2)/2; i++) {
br.readLine();
}
String tmp = br.readLine();
if (tmp.charAt(cs) == '#' && tmp.charAt(cs+cnt-1) == '#') {
System.out.println("DOWN");
} else if (tmp.charAt(cs) == '#') {
System.out.println("RIGHT");
} else {
System.out.println("LEFT");
}
}
public static void main(String[] args) throws Exception {
new Main().solution();
}
}
'PS > BOJ' 카테고리의 다른 글
백준 20126 자바 - 교수님의 기말고사 (BOJ 20126 JAVA) (0) | 2022.02.01 |
---|---|
백준 1439 자바 - 뒤집기 (BOJ 1439 JAVA) (0) | 2022.01.31 |
백준 11609 자바 - Class Time (BOJ 11609 JAVA) (0) | 2022.01.29 |
백준 15922 자바 - 아우으 우아으이야!! (BOJ 15922 JAVA) (0) | 2022.01.28 |
백준 1817 자바 - 짐 챙기는 숌 (BOJ 1817 JAVA) (0) | 2022.01.27 |
댓글