[백준] 1476

ZEDY·2024년 8월 10일
0

백준 1476번: 날짜 계산 문제 풀이

이번 포스팅에서는 백준 1476번 문제인 "날짜 계산" 문제를 해결하는 과정을 정리하겠습니다. 이 문제는 주어진 세 가지 수 E, S, M에 대해 특정 규칙을 만족하는 연도를 찾는 문제입니다.

문제 이해

문제는 아래와 같은 세 가지 수를 기준으로 특정한 연도를 찾아야 합니다:

  • E는 지구를 나타내며, 1부터 15까지의 값을 가질 수 있습니다.
  • S는 태양을 나타내며, 1부터 28까지의 값을 가질 수 있습니다.
  • M은 달을 나타내며, 1부터 19까지의 값을 가질 수 있습니다.

우리는 특정한 연도 year를 찾으려고 합니다. 이 연도는 아래의 조건을 모두 만족해야 합니다:

  • year % 15 == E
  • year % 28 == S
  • year % 19 == M

코드 구현

문제를 해결하기 위한 코드를 구현했습니다. 아래는 코드와 설명입니다.

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

public class P1476 {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        String[] line = br.readLine().split(" "); // 입력 받기
        
        int earth = Integer.parseInt(line[0]) % 15;
        int sun = Integer.parseInt(line[1]) % 28;
        int moon = Integer.parseInt(line[2]) % 19;

        int result = 0;

        // 1부터 시작하여 조건을 만족하는 연도를 찾을 때까지 반복
        for(int i = 1; ; i++){
            if( (i % 15 == earth) && (i % 28 == sun) && (i % 19 == moon)){
                result = i;
                break;
            }
        }
        System.out.println(result);
    }
}

코드 설명

  1. 입력 처리:

    • BufferedReader를 사용해 한 줄로 입력된 값을 받아오고, 이를 공백 기준으로 분리하여 earth, sun, moon 변수에 저장합니다.
    • 입력된 earth, sun, moon 값을 각각 15, 28, 19로 나눈 나머지를 구해 저장합니다. 이는 문제에서 주어진 연도의 범위를 고려한 것입니다.
  2. 연도 찾기:

    • 무한 루프를 사용하여 1부터 시작하는 모든 i 값에 대해 조건을 확인합니다.
    • 조건이 만족되면, 그 i 값을 result 변수에 저장하고 루프를 종료합니다.
  3. 결과 출력:

    • 최종적으로 조건을 만족하는 result 값을 출력합니다.

문제 해결의 사고 흐름

이 문제를 해결하기 위한 기본적인 사고 흐름은 다음과 같습니다:

  1. 문제 분석: 문제에서 주어진 세 가지 조건을 만족하는 연도를 찾아야 한다는 점을 파악합니다.
  2. 나머지 연산 활용: 각 연도 year에 대해 E, S, M이 각각 1부터 시작하므로, 입력값을 각각 15, 28, 19로 나눈 나머지를 비교하는 방식을 선택합니다.
  3. 반복문 구현: 모든 가능한 연도를 탐색하는 반복문을 통해 조건을 만족하는 연도를 찾습니다.
  4. 결과 출력: 조건을 만족하는 첫 번째 연도를 출력합니다.

이렇게 함으로써 백준 1476번 문제를 해결할 수 있었습니다.

마무리

이 문제는 나머지 연산과 반복문을 잘 이해하고 활용하는 것이 핵심입니다. 무한 루프를 사용하여 특정 조건을 만족할 때까지 반복하며, 범위를 적절히 설정해 효율적인 문제 해결 방법을 도출하는 것이 중요합니다.

코드와 설명이 도움이 되었기를 바랍니다. 다음에도 더 흥미로운 문제로 찾아오겠습니다!

profile
Spring Boot 백엔드 주니어 개발자

0개의 댓글