본문 바로가기

알고리즘/BFS & DFS

[JAVA] 백준 14226번: 이모티콘

 

import java.util.Arrays;
import java.util.LinkedList;
import java.util.Queue;
import java.util.Scanner;

public class baekjoon14226 {
    public static void main(String[] args) {
        // 화면에 있는 이모티콘을 모두 복사해서 클립보드에 저장한다.
        // 클립보드에 있는 모든 이모티콘을 화면에 붙여넣기 한다.
        // 화면에 있는 이모티콘 중 하나를 삭제한다.
        // 이모티콘 1개에서 시작
        Scanner sc = new Scanner(System.in);
        int s = sc.nextInt();
        int max = 2000;
        boolean visit[][] = new boolean[max][max];
        int result = 0;

        Queue<int[]> q = new LinkedList<>();
        q.add(new int[] { 1, 0, 0, 0 });

        while (!q.isEmpty()) {
            int[] info = q.remove();
            int position = info[0];
            int copy = info[1];
            int copyCount = info[2];
            int time = info[3];
            if (position == s) {
                result = time;
                break;
            }
            // 복사가 안되어 있는 경우
            // 복사를 진행하고 붙여넣기를 한다. 시간 + 2

            // 복사가 되어 있는 경우
            // 붙여 넣기를 진행한다. 시간 +1
            // 복사 붙여 넣기를 진행한다. 시간 + 2

            // 복사가 되어있는 경우 붙여넣기를 진행한다.
            if (position + copyCount < max && copy == 1 && visit[position + copyCount][copyCount] == false) {
                q.add(new int[] { position + copyCount, 1, copyCount, time + 1 });
                visit[position + copyCount][copyCount] = true;
            }
            //
            if (position - 1 >= 0 && visit[position - 1][copyCount] == false) {
                q.add(new int[] { position - 1, copy, copyCount, time + 1 });
                visit[position - 1][copyCount] = true;
            }

            // 복사가 되어있는 경우지만 새로운 복사를 진행하여 붙여넣기를 한다.
            // 복사가 안되어 있는 경우 복사를 진행 후 붙여넣기를 한다.
            if (2 * position < max && visit[position][position] == false) {
                q.add(new int[] { position, 1, position, time + 1 });
                visit[position][position] = true;
            }

        }
        System.out.println(result);

    }

}

 

'알고리즘 > BFS & DFS' 카테고리의 다른 글

[JAVA] 백준 1261번: 알고스팟  (0) 2021.07.18
[JAVA] 백준 13549번: 숨바꼭질 3  (0) 2021.07.18
[JAVA] 백준 13913: 숨바꼭질4  (0) 2021.07.17
[JAVA] 백준 1697번: 숨바꼭질  (0) 2021.07.15
BFS  (0) 2021.07.15