반응형
풀이
문제에 대한 이해가 어려운 문제였다.
문제 조건은
- 화면에 있는 이모티콘을 모두 복사해서 클립보드에 저장한다. - > 클립보드 = 화면
- 클립보드에 있는 모든 이모티콘을 화면에 붙여넣기 한다. - > 화면 += 클립보드
- 화면에 있는 이모티콘 중 하나를 삭제한다. -> 화면 -= 1
각각의 연산이 1초씩 걸립니다.
(저는 문제를 잘못 이해했었는데 1, 2, 3단계로 모든 단계를 마치면 1초가 걸린다라고 이해를 했어요 ㅜㅜ)
처음 조건이 화면에 한개가 있고,
1번 연산, 2번 연산, 3번 연산을 각각 써줘서 가장 최소의 시간으로 S까지 도달하는 초를 구해주면 됩니다.
2차원 boolean 배열을 따져줘서 이미 방문한 곳은 방문하지 않게 만들구,
각각의 조건에 맞게 구현해주었습니다.
import java.io.*;
import java.util.*;
public class Main {
static boolean[][] visited;
static int S;
public static void main(String[] args) throws Exception{
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
S = Integer.parseInt(br.readLine());
bfs();
}
private static void bfs() {
Queue<Node> queue = new LinkedList<>();
queue.offer(new Node(1, 0, 0));
// 화면, 클립보드
visited = new boolean[1001][1001];
visited[1][0] = true;
while(!queue.isEmpty()) {
Node cur = queue.poll();
// 조건에 해당하면 출력하고 멈추기
if(cur.monitor == S) {
System.out.println(cur.time);
break;
}
// 1번조건 - 클립보드 = 화면
if(cur.monitor != 0 && !visited[cur.monitor][cur.monitor]) {
queue.offer(new Node(cur.monitor, cur.monitor, cur.time + 1));
visited[cur.monitor][cur.monitor] = true;;
}
// 2번조건 화면 += 클립보드
if(cur.clipBoard != 0 && cur.monitor + cur.clipBoard <= 1000 &&!visited[cur.clipBoard + cur.monitor][cur.clipBoard] ) {
queue.offer(new Node(cur.monitor + cur.clipBoard, cur.clipBoard, cur.time + 1));
visited[cur.clipBoard + cur.monitor][cur.clipBoard] = true;
}
// 3번조건 화면 -= 1
if(cur.monitor - 1 >= 0 && !visited[cur.monitor - 1][cur.clipBoard]) {
queue.offer(new Node(cur.monitor - 1, cur.clipBoard, cur.time + 1));
visited[cur.monitor - 1][cur.clipBoard] = true;
}
}
}
private static class Node{
int monitor, clipBoard, time;
public Node(int monitor, int clipBoard, int time) {
this.monitor = monitor;
this.clipBoard = clipBoard;
this.time = time;
}
}
}
반응형
'알고리즘 > 문제 풀이' 카테고리의 다른 글
[Java/자바 SWEA 1953] 탈주범 검거 (0) | 2022.04.11 |
---|---|
[Java/자바 백준 1504] 특정한 최단 경로 (0) | 2022.03.30 |
[Java/자바 백준 1459] 걷기 (0) | 2022.03.29 |
[Java/자바 백준 1781] 컵라면 (0) | 2022.03.29 |
[Java/자바 백준 23290] 마법사 상어와 복제 (0) | 2022.03.28 |