[BOJ] 14226๋ฒ ์ด๋ชจํฐ์ฝ
https://www.acmicpc.net/problem/14226
๋ฌธ์ ์ ๊ทผ
ํ๋ฉด์ ์๋ ์ด๋ชจํฐ์ฝ์ S๊ฐ ๋ง๋๋ ์ต์ ์๊ฐ์ ๊ตฌํ๋ ๋ฌธ์ ์ด๋ค.
ํ๋ฉด์ ์๋ ์ด๋ชจํฐ์ฝ ๊ฐ์์ ํด๋ฆฝ๋ณด๋์ ์๋ ์ด๋ชจํฐ์ฝ ๊ฐ์ ๊ทธ๋ฆฌ๊ณ ์๊ฐ ์ ๋ณด๋ฅผ ์ ์ฅํ ์ ์๋ Emoticon ํด๋์ค๋ฅผ ๋ง๋ค๊ณ isVisited ๋ฐฐ์ด์ ํ๋ฉด์ ์๋ ์ด๋ชจํฐ์ฝ ์์ ํด๋ฆฝ๋ณด๋์ ์๋ ์ด๋ชจํฐ์ฝ ์๋ฅผ ๊ณ ๋ คํ ์ ์๋๋ก 2์ฐจ์ ๋ฐฐ์ด๋ก ๋ง๋ค์๋ค.
๊ทธ๋ฆฌ๊ณ BFS๋ฅผ ์ด์ฉํด์ ํ๋ฉด์ ์๋ ์ด๋ชจํฐ์ฝ์ ํด๋ฆฝ๋ณด๋์ ์ ์ฅํ๋ ๊ฒฝ์ฐ, ํ๋ฉด์ ์๋ ์ด๋ชจํฐ์ฝ ํ๊ฐ๋ฅผ ์ ๊ฑฐํ๋ ๊ฒฝ์ฐ, ํด๋ฆฝ๋ณด๋์ ์๋ ์ด๋ชจํฐ์ฝ์ ๋ถ์ฌ๋ฃ๋ ๊ฒฝ์ฐ ์ธ๊ฐ์ง๋ฅผ ๊ณ ๋ คํด์ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๋ค.
๋ฌธ์ ๋ฅผ ๋ณด๊ณ ์ด์ฐจ์ ๋ฐฐ์ด๋ก ํด๊ฒฐํ ์๊ฐ์ ํ์ง ๋ชปํด์ ํธ๋๋ฐ ๊ฝค๋ ์ค๋๊ฑธ๋ ธ๋ค...๊ทผ๋ฐ ์ด์ฐจ์ ๋ฐฐ์ด์ ์ฌ์ฉํ๋๊น ๋ค๋ฅธ ๋ฌธ์ ์ ๋ง์ฐฌ๊ฐ์ง๋ก ๊ต์ฅํ ์ฝ๊ฒ ํ๋ ธ๋ค!
ํด๋ฆฐ ์ฝ๋๋ผ๋ ์ฑ
์ ์ฝ๊ณ ์๋๋ฐ ๋ณ์๋ ํจ์ ์ด๋ฆ์ ์ง์ ๋๋ ์ด๋ฆ์ ๋ณด๊ณ ์ด ๋ณ์๋ ํจ์๊ฐ ์ด๋ค ์ผ์ ํ๋์ง ์์๋ณผ ์ ์๋๋ก ์ง๋ ๊ฒ์ด ์ข๋ค๊ณ ํด์ ์ต๋ํ ๋
ธ๋ ฅํ๊ณ ์๋ค!
Code
import java.util.LinkedList;
import java.util.Queue;
import java.util.Scanner;
public class BOJ14226 {
static int target;
static boolean[][] isVisited = new boolean[5000][5000]; // [ํ๋ฉด์ ์๋ ์ด๋ชจํฐ์ฝ ์][ํด๋ฆฝ๋ณด๋์ ์๋ ์ด๋ชจํฐ์ฝ ์]
static class Emoticon {
int countOnScreen; // ํ๋ฉด์ ์๋ ์ด๋ชจํฐ์ฝ ๊ฐ์
int countOnClipboard; // ํด๋ฆฝ๋ณด๋์ ์๋ ์ด๋ชจํฐ์ฝ ๊ฐ์
int time; // ์๊ฐ
public Emoticon(int countOnScreen, int countOnClipboard, int time) {
this.countOnScreen = countOnScreen;
this.countOnClipboard = countOnClipboard;
this.time = time;
}
}
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
target = sc.nextInt();
System.out.println(bfs());
}
public static int bfs() {
Queue<Emoticon> q = new LinkedList<>();
q.add(new Emoticon(1, 0, 0));
isVisited[1][0] = true;
while (!q.isEmpty()) {
Emoticon cur = q.poll();
int countOnScreen = cur.countOnScreen;
int countOnClipboard = cur.countOnClipboard;
int time = cur.time;
if(countOnScreen == target){
return time;
}
if(countOnScreen > 0 && countOnScreen < 1001){
// ํ๋ฉด์ ์๋ ์ด๋ชจํฐ์ฝ ํด๋ฆฝ๋ณด๋์ ์ ์ฅ
if(!isVisited[countOnScreen][countOnScreen]){
q.add(new Emoticon(countOnScreen, countOnScreen, time + 1));
isVisited[countOnScreen][countOnScreen] = true;
}
// ํ๋ฉด์ ์๋ ์ด๋ชจํฐ์ฝ ํ๊ฐ ์ญ์
if(!isVisited[countOnScreen-1][countOnClipboard]){
q.add(new Emoticon(countOnScreen - 1, countOnClipboard, time + 1));
isVisited[countOnScreen - 1][countOnClipboard] = true;
}
}
if(countOnClipboard != 0){
//ํด๋ฆฝ๋ณด๋์ ์๋ ๋ชจ๋ ์ด๋ชจํฐ์ฝ ๋ถ์ฌ๋ฃ๊ธฐ
if(!isVisited[countOnScreen+countOnClipboard][countOnClipboard]){
q.add(new Emoticon(countOnScreen + countOnClipboard, countOnClipboard, time + 1));
isVisited[countOnScreen + countOnClipboard][countOnClipboard] = true;
}
}
}
return -1;
}
}
'Algorithm' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Algorithm/Java][๋ฐฑ์ค] 2775๋ฒ ๋ถ๋ ํ์ฅ์ด ๋ ํ ์ผ (0) | 2022.11.14 |
---|---|
[Algorithm/Java][๋ฐฑ์ค] 2252๋ฒ ์ค ์ธ์ฐ๊ธฐ (0) | 2022.05.24 |
[Algorithm/Java][๋ฐฑ์ค] 1197๋ฒ ์ต์ ์คํจ๋ ํธ๋ฆฌ (0) | 2022.05.22 |
[Algorithm/Java][๋ฐฑ์ค] 1916๋ฒ ์ต์๋น์ฉ ๊ตฌํ๊ธฐ (0) | 2022.05.20 |
[Algorithm/Java][๋ฐฑ์ค] 1806๋ฒ ๋ถ๋ถํฉ (0) | 2022.05.18 |