빙응의 공부 블로그
[BOJ G4][#BFS]14226번 이모티콘 본문
이모티콘 성공
시간 제한메모리 제한제출정답맞힌 사람정답 비율
2 초 | 512 MB | 28480 | 10760 | 7170 | 34.334% |
문제
영선이는 매우 기쁘기 때문에, 효빈이에게 스마일 이모티콘을 S개 보내려고 한다.
영선이는 이미 화면에 이모티콘 1개를 입력했다. 이제, 다음과 같은 3가지 연산만 사용해서 이모티콘을 S개 만들어 보려고 한다.
- 화면에 있는 이모티콘을 모두 복사해서 클립보드에 저장한다.
- 클립보드에 있는 모든 이모티콘을 화면에 붙여넣기 한다.
- 화면에 있는 이모티콘 중 하나를 삭제한다.
모든 연산은 1초가 걸린다. 또, 클립보드에 이모티콘을 복사하면 이전에 클립보드에 있던 내용은 덮어쓰기가 된다. 클립보드가 비어있는 상태에는 붙여넣기를 할 수 없으며, 일부만 클립보드에 복사할 수는 없다. 또한, 클립보드에 있는 이모티콘 중 일부를 삭제할 수 없다. 화면에 이모티콘을 붙여넣기 하면, 클립보드에 있는 이모티콘의 개수가 화면에 추가된다.
영선이가 S개의 이모티콘을 화면에 만드는데 걸리는 시간의 최솟값을 구하는 프로그램을 작성하시오.
입력
첫째 줄에 S (2 ≤ S ≤ 1000) 가 주어진다.
출력
첫째 줄에 이모티콘을 S개 만들기 위해 필요한 시간의 최솟값을 출력한다.
예제 입력 1 복사
2
예제 출력 1 복사
2
예제 입력 2 복사
4
예제 출력 2 복사
4
예제 입력 3 복사
6
예제 출력 3 복사
5
예제 입력 4 복사
18
예제 출력 4 복사
8
📝풀이
편하게 BFS로 풀 수 있으나 조건이 많다.
- 클립보드 복사에 대해 생각해야하기 때문에 상태를 현재의 숫자와 클립보드 숫자를 둘 다 생각해야한다.
- 최소 수를 구하기 위한 방문 체크는 필수이다.
- BFS이므로 처음에 선점한 방문만 체크해주면 되기 때문에 쉽다.
public class G4_14226 {
static int S;
static boolean visited[][];
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
S = Integer.parseInt(br.readLine());
visited = new boolean[1001][1001];
int result = bfs();
System.out.println(result);
}
public static int bfs() {
Queue<int[]> q = new LinkedList<>();
q.add(new int[]{1, 0, 0});
visited[1][0] = true;
while (!q.isEmpty()) {
int[] state = q.poll();
int screen = state[0];
int clipboard = state[1];
int count = state[2];
if (screen == S) {
return count;
}
if (clipboard != screen && !visited[screen][screen]) {
visited[screen][screen] = true;
q.add(new int[]{screen, screen, count + 1});
}
if (clipboard != 0 && screen + clipboard <= 1000 && !visited[screen + clipboard][clipboard]) {
visited[screen + clipboard][clipboard] = true;
q.add(new int[]{screen + clipboard, clipboard, count + 1});
}
if (screen - 1 >= 0 && !visited[screen - 1][clipboard]) {
visited[screen - 1][clipboard] = true;
q.add(new int[]{screen - 1, clipboard, count + 1});
}
}
return -1;
}
}
'Argorithm' 카테고리의 다른 글
[BOJ G5][#DP]5557번 1학년 (0) | 2024.07.29 |
---|---|
[BOJ G5][#DP]11058번 크리보드 (0) | 2024.07.28 |
[BOJ G5][#DFS]17070번 파이프 옮기기 1 (3) | 2024.07.22 |
[BOJ G5][#조합]1038번 감소하는 수 (0) | 2024.07.21 |
[BOJ S1][#플로이드워셜/BFS]1389번 케빈 베이컨의 6단계 법칙 (0) | 2024.07.19 |