[JAVA/14226번] 이모티콘

고지훈·2021년 10월 31일
1

Algorithm

목록 보기
47/68
post-thumbnail

문제


입력 및 출력


풀이


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;
    }
}

결과 및 해결방법

[결과]

[정리]

해결방법
코드를 보며 설명^_^

profile
"계획에 따르기보다 변화에 대응하기를"

0개의 댓글