ALGORITHM/BOJ
[백준] 14226 이모티콘
0298
2022. 8. 15. 13:13
https://www.acmicpc.net/problem/14226
14226번: 이모티콘
영선이는 매우 기쁘기 때문에, 효빈이에게 스마일 이모티콘을 S개 보내려고 한다. 영선이는 이미 화면에 이모티콘 1개를 입력했다. 이제, 다음과 같은 3가지 연산만 사용해서 이모티콘을 S개 만
www.acmicpc.net
2022-08-15
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
|
import java.util.LinkedList;
import java.util.Queue;
import java.util.Scanner;
public class Main14226 {
static class Emoticon {
int val;
int copy;
public Emoticon(int val, int copy) {
this.val = val;
this.copy = copy;
}
}
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int S = sc.nextInt();
Queue<Emoticon> q = new LinkedList<>();
q.add(new Emoticon(1, 0));
int time = 0;
boolean[][] vtd = new boolean[S*2+1][S*2+1];
loop:while(!q.isEmpty()) {
int size = q.size();
while(size > 0) {
Emoticon e = q.poll();
if(e.val == S) break loop;
if(!vtd[e.val][e.val]) {
q.add(new Emoticon(e.val, e.val)); // 1
vtd[e.val][e.val] = true;
}
if(e.val+e.copy <= S*2 && !vtd[e.val+e.copy][e.copy]) {
q.add(new Emoticon(e.val+e.copy, e.copy)); // 2
vtd[e.val+e.copy][e.copy] = true;
}
if(e.val-1 >= 2 && !vtd[e.val-1][e.copy]) {
q.add(new Emoticon(e.val-1, e.copy)); // 3
vtd[e.val-1][e.copy] = true;
}
size--;
}
time++;
}
System.out.println(time);
}
}
|
cs |
#문제풀이
아래 연산들은 모두 1초 씩이어서 한 케이스 당 3개의 연산들을 한 번씩 다 적용 했다.
- 화면에 있는 이모티콘을 모두 복사해서 클립보드에 저장한다.
- 클립보드에 있는 모든 이모티콘을 화면에 붙여넣기 한다.
- 화면에 있는 이모티콘 중 하나를 삭제한다.
조건 중 S가 2 <= S <= 1000 이므로, visited를 체크하는 배열은 S*2+1로 잡았다.