[BOJ] 백준 14226번 : 이모티콘 - Java

2024. 12. 31. 21:08·Algorithm Solving/Java

https://www.acmicpc.net/problem/14226

import java.util.*;

public class Main {
    static boolean[][] visited; // 방문 여부 배열 선언
    static int S; // 목표 이모티콘 개수

    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        S = sc.nextInt(); // 목표 이모티콘 개수

        visited = new boolean[2001][2001]; // 최대 화면, 클립보드 개수는 2000까지 가능
        System.out.println(bfs()); // BFS 실행 및 결과 출력
    }

    public static int bfs() {
        Queue<int[]> queue = new LinkedList<>();
        queue.offer(new int[]{1, 0, 0}); // 초기 상태: 화면 1개, 클립보드 0개, 시간 0초
        visited[1][0] = true; // 화면 1개, 클립보드 0개 방문 처리

        while (!queue.isEmpty()) {
            int[] current = queue.poll();
            int screen = current[0]; // 화면 이모티콘 개수
            int clipboard = current[1]; // 클립보드 이모티콘 개수
            int time = current[2]; // 현재까지 소요된 시간

            // 종료 조건: 화면 이모티콘 개수가 S개일 때
            if (screen == S) {
                return time; // 최소 시간 반환
            }

            // 연산 1: 복사
            if (!visited[screen][screen]) { // 현재 화면을 클립보드에 복사
                visited[screen][screen] = true;
                queue.offer(new int[]{screen, screen, time + 1});
            }

            // 연산 2: 붙여넣기
            if (clipboard > 0 && screen + clipboard <= 2000) { // 클립보드 붙여넣기
                if (!visited[screen + clipboard][clipboard]) {
                    visited[screen + clipboard][clipboard] = true;
                    queue.offer(new int[]{screen + clipboard, clipboard, time + 1});
                }
            }

            // 연산 3: 삭제
            if (screen > 0) { // 화면에서 1개 삭제
                if (!visited[screen - 1][clipboard]) {
                    visited[screen - 1][clipboard] = true;
                    queue.offer(new int[]{screen - 1, clipboard, time + 1});
                }
            }
        }
        return -1; // 도달할 수 없는 경우
    }
}
저작자표시 비영리 변경금지 (새창열림)

'Algorithm Solving > Java' 카테고리의 다른 글

[BOJ] 백준 9095번 : 1, 2, 3 더하기 - Java  (0) 2025.01.02
[BOJ] 백준 1181번 : 단어 정렬 - Java  (0) 2025.01.01
[BOJ] 백준 2468번 : 안전 영역 - Java  (1) 2024.12.30
[BOJ] 백준 7562번 : 나이트의 이동 - Java  (0) 2024.12.30
[BOJ] 백준 7569번 : 토마토 - Java  (0) 2024.12.29
'Algorithm Solving/Java' 카테고리의 다른 글
  • [BOJ] 백준 9095번 : 1, 2, 3 더하기 - Java
  • [BOJ] 백준 1181번 : 단어 정렬 - Java
  • [BOJ] 백준 2468번 : 안전 영역 - Java
  • [BOJ] 백준 7562번 : 나이트의 이동 - Java
기만나🐸
기만나🐸
공부한 내용을 기록합시다 🔥🔥🔥
  • 기만나🐸
    기만나의 공부 기록 🤓
    기만나🐸
  • 전체
    오늘
    어제
    • ALL (147)
      • TIL (Today I Learned) (56)
      • Dev Projects (15)
      • Algorithm Solving (67)
        • Java (52)
        • SQL (15)
      • Certifications (8)
        • 정보처리기사 실기 (8)
  • 인기 글

  • 태그

    BOJ
    javascript
    Firebase
    백트래킹
    bootstrap
    jpa
    websocket
    sql
    jwt
    mysql
    다이나믹프로그래밍
    Subquery
    CSS
    자료구조
    java
    Google Fonts
    프로그래머스
    BFS
    시뮬레이션
    join
    완전탐색
    jQuery
    programmers
    greedy
    dp
    백준
    그리디
    HTML
    GROUP BY
    DFS
  • 최근 글

  • 최근 댓글

  • hELLO· Designed By정상우.v4.10.3
기만나🐸
[BOJ] 백준 14226번 : 이모티콘 - Java
상단으로

티스토리툴바