๐ŸŒžAlgorithm/๐Ÿ”ฅprogrammers

[programmers] ๋ฏธ๋กœ ํƒˆ์ถœ

๋ฟŒ์•ผ._. 2026. 7. 1. 11:41
๋ฌธ์ œ
https://school.programmers.co.kr/learn/courses/30/lessons/159993
 

ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค

SW๊ฐœ๋ฐœ์ž๋ฅผ ์œ„ํ•œ ํ‰๊ฐ€, ๊ต์œก์˜ Total Solution์„ ์ œ๊ณตํ•˜๋Š” ๊ฐœ๋ฐœ์ž ์„ฑ์žฅ์„ ์œ„ํ•œ ๋ฒ ์ด์Šค์บ ํ”„

programmers.co.kr

 


< ๋ฏธ๋กœ ํƒˆ์ถœ >

 

๋ฌธ์ œ ํ’€์ด (Java)

import java.util.*;

class Solution {
	public int solution(String[] maps) {
		int answer = -1;

		char arr[][] = new char[maps.length][maps[0].length()];
		int s[] = new int[2];
		int l[] = new int[2];
		int e[] = new int[2];

		for (int i = 0; i < maps.length; i++) {
			for (int j = 0; j < maps[0].length(); j++) {
				arr[i][j] = maps[i].charAt(j);
				if (arr[i][j] == 'S') {
					s[0] = i;
					s[1] = j;
				} else if (arr[i][j] == 'E') {
					e[0] = i;
					e[1] = j;
				} else if (arr[i][j] == 'L') {
					l[0] = i;
					l[1] = j;
				}
			}
		}

		int move1 = bfs(l, s, arr);
		int move2 = bfs(l, e, arr);

		if (move1 != -1 && move2 != -1) {
			answer = move1 + move2;
		}

		return answer;
	}

	private int bfs(int[] start, int[] end, char[][] arr) {
		Queue<int[]> queue = new LinkedList<>();
		queue.add(new int[] { start[0], start[1], 0 });

		int dx[] = { -1, 1, 0, 0 };
		int dy[] = { 0, 0, -1, 1 };

		boolean[][] visited = new boolean[arr.length][arr[0].length];
		visited[start[0]][start[1]] = true;

		while (!queue.isEmpty()) {
			int info[] = queue.poll();

			for (int i = 0; i < 4; i++) {
				int x = info[0] + dx[i];
				int y = info[1] + dy[i];

				if (x == end[0] && y == end[1]) {
					return info[2] + 1;
				}

				if (x >= 0 && x < arr.length && y >= 0 && y < arr[0].length && arr[x][y] != 'X' && !visited[x][y]) {
					queue.add(new int[] { x, y, info[2] + 1 });
					visited[x][y] = true;
				}
			}

		}
		return -1;

	}
}

 

๋จผ์ € maps๋ฅผ ์ด์ฐจ์› ๋ฐฐ์—ด๋กœ ๋ฐ”๊ฟ”์ฃผ๋ฉฐ ์‹œ์ž‘ ์ง€์ , ์ถœ๊ตฌ, ๋ ˆ๋ฒ„ ์œ„์น˜๋ฅผ ๊ตฌํ•œ๋‹ค. (๋ ˆ๋ฒ„->์‹œ์ž‘)๊นŒ์ง€ ๊ฑธ๋ฆฌ๋Š” ์‹œ๊ฐ„๊ณผ (๋ ˆ๋ฒ„->๋„์ฐฉ)๊นŒ์ง€ ๊ฑธ๋ฆฌ๋Š” ์‹œ๊ฐ„์„ bfs๋กœ ๊ตฌํ•œ๋‹ค. ์ด๋•Œ, ๋‘˜ ์ค‘ ํ•˜๋‚˜๋ผ๋„ -1์ด ๋ฐ˜ํ™˜๋˜์—ˆ๋‹ค๋ฉด ํƒˆ์ถœํ•  ์ˆ˜ ์—†๋Š” ๊ฒƒ์ด๋ฏ€๋กœ ์ตœ์ข… -1์„ ๋ฐ˜ํ™˜ํ•˜๊ณ , ๋‘˜ ๋‹ค -1์ด ์•„๋‹ˆ๋ผ๋ฉด ์ตœ์ข… ๋‘ ๊ฐ’์„ ๋”ํ•ด ๋ฐ˜ํ™˜ํ•œ๋‹ค.

 

bfs ํ•จ์ˆ˜์—์„œ๋Š” Queue์— ๋ ˆ๋ฒ„ ์œ„์น˜์™€ ์ด๋™ ์‹œ๊ฐ„ 0์„ ์ €์žฅํ•˜๊ณ  ํ˜„์žฌ ์œ„์น˜๋ฅผ ๋ฐฉ๋ฌธํ‘œ์‹œ ํ•œ๋‹ค. Queue๊ฐ€ ๋นŒ ๋•Œ๊นŒ์ง€ ๋‹ค์Œ ๊ณผ์ •์„ ๋ฐ˜๋ณตํ•œ๋‹ค.

1. queue poll

2. ์ƒ, ํ•˜, ์ขŒ, ์šฐ๋ฅผ ํƒ์ƒ‰ํ•˜๋ฉฐ ๋ฐฐ์—ด ๋ฒ”์œ„ ์•ˆ์ด๊ณ , ๋ฒฝ์ด ์•„๋‹ˆ๊ณ , ์•„์ง ๋ฐฉ๋ฌธํ•˜์ง€ ์•Š์€ ๊ณณ์ด๋ผ๋ฉด Queue์— ์ €์žฅ ๋ฐ ๋ฐฉ๋ฌธํ‘œ์‹œ ํ•œ๋‹ค. ์ด๋•Œ, ๋„์ฐฉ ์œ„์น˜์— ๋„๋‹ฌํ–ˆ๋‹ค๋ฉด ๊ฑธ๋ฆฐ ์‹œ๊ฐ„์„ ๋ฐ˜ํ™˜ํ•œ๋‹ค.

๋ชจ๋“  ํƒ์ƒ‰์„ ๋งˆ์นœ ๋’ค ๋„์ฐฉ ์œ„์น˜์— ๋„๋‹ฌํ•˜์ง€ ๋ชปํ•œ๋‹ค๋ฉด -1์„ ๋ฐ˜ํ™˜ํ•œ๋‹ค.

 


โญ์ค‘๊ฐ„์— ๊ฑฐ์ณ์•ผ ํ•˜๋Š” ๊ณณ์ด ์žˆ๋‹ค๋ฉด (์ค‘๊ฐ„ ์œ„์น˜ -> ์‹œ์ž‘ ์œ„์น˜) + (์ค‘๊ฐ„ ์œ„์น˜ -> ๋„์ฐฉ ์œ„์น˜)๋ฅผ ๊ตฌํ•˜๋ฉด ์‰ฝ๊ฒŒ ๊ตฌํ•  ์ˆ˜ ์žˆ๋‹ค! โญ

๊นŒ๋จน์ง€ ๋ง๊ธฐ..!


 

์ถœ์ฒ˜: ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค ์ฝ”๋”ฉ ํ…Œ์ŠคํŠธ ์—ฐ์Šต, 
https://school.programmers.co.kr/learn/challenges