Baekjoon - 14940

Tadap·2023년 10월 10일
0

Baekjoon

목록 보기
48/94
post-custom-banner

문제

Solved.ac Class3+

1차시도

public class Main {
	public static void main(String[] args) throws Exception{
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		StringBuilder sb = new StringBuilder();
		String[] split = br.readLine().split(" ");
		int x = Integer.parseInt(split[0]);
		int y = Integer.parseInt(split[1]);

		Coordinate startCoordinate = null;

		int[][] data = new int[x][y];
		boolean[][] isVisit = new boolean[x][y];

		for (int i = 0; i < x; i++) {
			String[] input = br.readLine().split(" ");
			for (int j = 0; j < y; j++) {
				int point = Integer.parseInt(input[j]);
				data[i][j] = point;
				if (point == 2) {
					startCoordinate = new Coordinate(i, j);
					isVisit[i][j] = true;
					data[i][j] = 0;
				}
			}
		}

		Queue<Coordinate> queue = new LinkedList<>();
		queue.add(startCoordinate);

		while (!queue.isEmpty()) {
			Coordinate now = queue.remove();
			int visitX = now.x;
			int visitY = now.y;

			if (visitX + 1 < x && !isVisit[visitX+1][visitY]) { // x + 1
				isVisit[visitX + 1][visitY] = true;
				if (data[visitX + 1][visitY] == 1) {
					data[visitX + 1][visitY] = data[visitX][visitY] + 1;
					queue.add(new Coordinate(visitX + 1, visitY));
				}
			}
			if (visitY + 1 < y && !isVisit[visitX][visitY+1]) { // y + 1
				isVisit[visitX][visitY + 1] = true;
				if (data[visitX][visitY + 1] == 1) {
					data[visitX][visitY + 1] = data[visitX][visitY] + 1;
					queue.add(new Coordinate(visitX, visitY + 1));
				}
			}
			if (visitX - 1 > -1 && !isVisit[visitX - 1][visitY]) { // x - 1
				isVisit[visitX - 1][visitY] = true;
				if (data[visitX - 1][visitY] == 1) {
					data[visitX - 1][visitY] = data[visitX][visitY] + 1;
					queue.add(new Coordinate(visitX - 1, visitY));
				}
			}
			if (visitY - 1 > -1 && !isVisit[visitX][visitY - 1]) { // y - 1
				isVisit[visitX][visitY - 1] = true;
				if (data[visitX][visitY - 1] == 1) {
					data[visitX][visitY - 1] = data[visitX][visitY] + 1;
					queue.add(new Coordinate(visitX, visitY - 1));
				}
			}

		}

		for (int i = 0; i < x; i++) {
			for (int j = 0; j < y; j++) {
				sb.append(data[i][j]).append(" ");
			}
			sb.append("\n");
		}

		System.out.println(sb);

	}

	private static class Coordinate {
		private final int x;
		private final int y;

		public Coordinate(int x, int y) {
			this.x = x;
			this.y = y;
		}
	}

}

실패

2차시도

for (int i = 0; i < x; i++) {
			for (int j = 0; j < y; j++) {
				if (isVisit[i][j]) {
					sb.append(data[i][j]).append(" ");
				} else {
					sb.append("-1 ");
				}
			}
			sb.append("\n");
		}

조건중 빼먹은 원래 갈 수 있는 땅인 부분 중에서 도달할 수 없는 위치는 -1을 출력한다. 반영

실패

3차시도

for (int i = 0; i < x; i++) {
			String[] input = br.readLine().split(" ");
			for (int j = 0; j < y; j++) {
				int point = Integer.parseInt(input[j]);
				data[i][j] = point;
				if (point == 2) {
					startCoordinate = new Coordinate(i, j);
					isVisit[i][j] = true;
				} else if (point == 0) {
					isVisit[i][j] = true;
				}
			}
		}

		Queue<Coordinate> queue = new LinkedList<>();
		queue.add(startCoordinate);
		data[startCoordinate.x][startCoordinate.y] = 0;

만약 도달할 수 없는 곳에 원래 갈 수 없는 곳이 있다면 -1로 출력이 되기 때문에 코드 수정

성공

post-custom-banner

0개의 댓글