알고리즘

백준 24390번 또 전자레인지야? (JAVA)

박카스마시며코딩 2023. 3. 17. 20:07

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

 

24390번: 또 전자레인지야?

첫 줄에 잇창명이 원하는 조리시간이 M:S 형태로 주어진다(0 ≤ M ≤ 60, 0 ≤ S ≤ 59). M은 분, S는 초이며, 항상 두 자리 숫자로 주어진다. 조리시간은 10초 이상 60분(3600초) 이하이며, 항상 10의 배수

www.acmicpc.net

 

 

 

package BOJ.bfs;

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.HashSet;
import java.util.LinkedList;
import java.util.Queue;
import java.util.Set;
import java.util.function.Function;

public class BOJ_24390 {

    public static void main(String[] args) throws Exception {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        String command = br.readLine();
        String[] temp = command.split(":");
        Function<String,Integer> stoi = Integer::parseInt;
        int min = stoi.apply(temp[0]);
        int sec = stoi.apply(temp[1]);
        sec += min * 60;
        int result = cal(sec);
        System.out.println(result);
    }
    private static final int[] BUTTON = {10,60,600,30};
    private static int cal(int sec) {
        if(sec == 30){
            return 1;
        }
        Queue<Integer>  q = new LinkedList<>();
        q.offer(0);
        Set<Integer> visited = new HashSet<>();
        int time = 0;
        while(!q.isEmpty()){
            int size = q.size();
            for(int s = 0 ; s < size ; s++){
                int now = q.poll();
                if(now/10 == sec){
                    if(now % 10 == 1){
                        return time;
                    }else{
                        return time+1;
                    }
                }
                for(int i = 0 ; i < 4 ; i++){
                    int next = now + 10 * BUTTON[i];
                    if(i == 3 && next % 10 == 0){
                        next += 1;
                    }
                    if(!visited.contains(next) && next/10 <= sec){
                        q.offer(next);
                        visited.add(next);
                    }
                }

            }
            time++;
        }
        return -1;
    }
}