[백준 | Java] 1476 날짜 계산

알린·2024년 1월 31일

baekjoon

목록 보기
23/68

내 풀이

이 문제는 완전 탐색 문제로,
예제 4번을 보면 알 수 있듯이, 15, 28, 19의 최대공배수가 엄청 큰 수는 아니기 때문에 1씩 더해가며 확인하는 브루트포스 기법을 이용하여 풀었다.

👉 완전탐색 문제 설명 포스팅

오답 풀이

구현 아이디어는 다음과 같다.

  1. 연도, e, s, m을 0부터 시작하여 1씩 더함

  2. 만약 e, s, m가 각각 15, 28, 19를 넘어갔다면, 1로 초기화해 계속 더함

  3. 입력받은 E, S, M와 카운트되던 e, s, m가 모두 일치할 때 연도 반환

import java.io.*;
import java.util.StringTokenizer;

public class Main {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        StringTokenizer st = new StringTokenizer(br.readLine());
        BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));

        int E = Integer.parseInt(st.nextToken());
        int S = Integer.parseInt(st.nextToken());
        int M = Integer.parseInt(st.nextToken());
        int e;
        int s;
        int m;
        int year;
        e = s = m = year = 0;
        while (true) {
            year++;
            e++;
            s++;
            m++;
            if (e == 16) e = 1;
            if (s == 29) e = 1;
            if (m == 20) e = 1;
            if (e == E && s == S && m == M) break;
        }
        bw.write(year+"\n");
        bw.flush();
        bw.close();
    }
}

시간초과로 실패

정답 풀이

구현 아이디어는 다음과 같다.

  1. 연도를 0부터 시작하여 1씩 더함

  2. E, S, M의 범위에 맞게 각자 % 연산을 해 모두 0이 될 때의 연도 반환

import java.io.*;
import java.util.StringTokenizer;

public class Main {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        StringTokenizer st = new StringTokenizer(br.readLine());
        BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));

        int E = Integer.parseInt(st.nextToken());
        int S = Integer.parseInt(st.nextToken());
        int M = Integer.parseInt(st.nextToken());
        int year  = 0;

        while (true) {
            year++;
            if ((year - E) % 15 == 0 && (year - S) % 28 == 0 && (year - M) % 19 == 0)
                break;
        }
        bw.write(year+"\n");
        bw.flush();
        bw.close();
    }
}

profile
짱이 되고싶은 개발 기록

0개의 댓글