import java.io.*;
import java.util.*;
// 복사하기: 배열의 사이즈만큼 변수에 저장한다.
// 붙여넣기: 기존의 변수에 더한다.
// 한개 삭제하기: 이모티콘의 개수가 저장되어있는 변수 -1
class Main {
public static int S;
public static boolean[][] visited;
public static void main(String args[]) throws Exception {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
// 만들어야할 이모티콘 개수 S
S = Integer.parseInt(br.readLine());
// 병사들을 배치할 지도
visited = new boolean[1001][1001];
// BFS메소드 호출
BFS();
}
public static void BFS() {
// Node타입을 갖는 큐 선언
Queue < Node > queue = new LinkedList < > ();
// 큐에 복사한 개수, 이모티콘의 개수, 연산횟수를 넣는다.
queue.add(new Node(0, 1, 0));
// 행은 복사된 개수, 열은 현재 이모티콘의 개수를 표현한다.
visited[0][1] = true;
while (!queue.isEmpty()) {
// 큐의 가장 앞에 있는 병사를 꺼낸다.
Node node = queue.poll();
// 이모티콘의 개수가 같아질 경우
if (node.emoji == S) {
// 연산 횟수를 출력
System.out.println(node.count);
return;
}
// 현재 이모티콘의 개수를 복사한다.
queue.add(new Node(node.emoji, node.emoji, node.count + 1));
// 복사한 이모티콘의 개수를 현재 이모티콘에 붙여넣기를 한다.
if (node.copy != 0 && node.copy + node.emoji <= S && !visited[node.copy][node.emoji + node.copy]) {
queue.add(new Node(node.copy, node.emoji + node.copy, node.count + 1));
visited[node.copy][node.emoji + node.copy] = true;
}
// 이모티콘을 하나 삭제한다.
if (0 < node.emoji && !visited[node.copy][node.emoji - 1]) {
queue.add(new Node(node.copy, node.emoji - 1, node.count + 1));
visited[node.copy][node.emoji - 1] = true;
}
}
}
}
class Node {
// 복사한 개수, 이모티콘의 개수, 연산 횟수
int copy, emoji, count;
// Node 생성자
public Node(int copy, int emoji, int count) {
this.copy = copy;
this.emoji = emoji;
this.count = count;
}
}
해결방법
코드를 보며 설명^_^