본문 바로가기
PS/BOJ

[자바] 백준 14625 - 냉동식품 (boj java)

by Nahwasa 2022. 6. 25.

문제 : boj14625

 

  시작시간부터 종료시간까지 각 분마다 어떠한 숫자들이 표시될지만 잘 판단할 수 있다면 풀 수 있다. 함수를 나눠보자. 필요한건 결국

 

1. 시작시간부터 시작해서 종료시간까지 1분씩 잘 더해줄 수 있는 함수

2. '1'의 각 시간에서 N이 포함되어 있는지 판단해주는 함수

 

위의 두 개만 있으면 된다. 문자로 해도 상관없지만, 내 경우엔 숫자로 처리했다. '1'에 해당하는 부분이 plusMin, '2'에 해당하는게 canSee 이다. 찾는 방법은 코드를 참고해보자. 주의점은 HHMM 형태이므로, int로 나타냈을 때 1000이하의 수라면, 예를들어서 5시 34분이라면 534라고 표현될 것이다. 실제론 맨 앞에 0이 있다고 봐야 하므로 N이 0일 경우 1000 이하의 수라면 0이 항상 존재한다고 볼 수 있다. 이 부분을 주의해야한다.

 

 

코드 : github

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.StringTokenizer;

public class Main {
    private boolean canSee(int a, int n) {
        if (a<1000 && n==0) return true;
        while (a!=0) {
            if (a%10==n) return true;
            a/=10;
        }
        return false;
    }
    private int plusMin(int a) {
        if (a%100 == 59)
            return (a/100+1)*100;
        return ++a;
    }
    private void solution() throws Exception {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        StringTokenizer st = new StringTokenizer(br.readLine());
        int s = Integer.parseInt(st.nextToken())*100 + Integer.parseInt(st.nextToken());
        st = new StringTokenizer(br.readLine());
        int e = Integer.parseInt(st.nextToken())*100 + Integer.parseInt(st.nextToken());
        int n = Integer.parseInt(br.readLine());

        int cnt = 0;
        while (s<=e) {
            if (canSee(s, n)) cnt++;
            s = plusMin(s);
        }
        System.out.println(cnt);
    }
    public static void main(String[] args) throws Exception {
        new Main().solution();
    }
}

댓글