코딩테스트/풀이

[시뮬레이션 / 풀이방법] 날짜와 시간

haenni 2025. 2. 10. 23:52

[시뮬레이션 / 풀이방법] 날짜와 시간

오늘은 코딩테스트에서 볼 수 있는 시간과 날짜 간의 차이를 계산하는 방법에 대해 다뤄보겠습니다.

여기에서는 단순하게 시뮬레이션을 통해 1분 또는 1일 단위로 하나씩 증가시키며 시간을 계산하는 방식을 설명합니다.😃

 

1. 흐른 시간 계산

예를 들어, 2시 5분에서 4시 1분이 되려면 몇 분이 흘러야 하는지를 계산해봅시다.

단순하게 시뮬레이션을 통해 시간과 분을 1분 단위로 증가시키며, 분이 60분이 되면 시간을 1시간 늘리는 방식으로 구현할 수 있습니다.

ex) 2시 59분에서 1분 증가시 2시 60분이 되므로, hour를 + 1해주고 mins를 0으로 초기화해줍니다.

📄 코드 예시

import java.util.*;

public class Main {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int hour = sc.nextInt();    // 시작 시간 입력
        int mins = sc.nextInt();    // 시작 분 입력
        int endHour = sc.nextInt(); // 종료 시간 입력
        int endMins = sc.nextInt(); // 종료 분 입력
        int result = 0;             // 경과 시간(분) 결과 저장

        // 시작 시각이 종료 시각에 도달할 때까지 반복
        while (!(hour == endHour && mins == endMins)) {
            mins++;          // 분 증가
            result++;        // 경과 시간 증가

            if (mins == 60) { // 60분이 되면
                mins = 0;    // 분을 0으로 초기화
                hour++;      // 시간 1 증가
            }
        }
        System.out.println(result); // 결과 출력
    }
}

 


 

2. 흐른 날짜 계산

이번에는 날짜 간의 차이를 계산해봅시다. 예를 들어, 2월 5일에서 4월 1일이 되려면 단순하게 시뮬레이션을 통해 하루씩 증가시키며 해당 월의 최대 일 수를 초과하면 다음 달로 넘어가는 방식으로 계산할 수 있습니다.

 

여기서 각 월의 일수를 배열로 저장해 간결하게 구현할 수 있습니다. 단, 윤년이 아닌 경우 2월은 28일로 고정합니다.

📄 코드 예시

import java.util.*;

public class Main {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);

        int mon = sc.nextInt();      // 시작 월 입력
        int day = sc.nextInt();      // 시작 일 입력
        int end_mon = sc.nextInt();  // 종료 월 입력
        int end_day = sc.nextInt();  // 종료 일 입력
        int result = 1;              // 경과 일 결과 저장

        // 각 월의 최대 일수를 배열에 저장 (윤년이 아닌 경우)
        int[] mon_days = new int[]{31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};

        // 시작 월이 종료 월에 도달할 때까지 반복
        while (!(mon == end_mon)) {
            result += mon_days[mon - 1] - day;  // 해당 월의 남은 일 수를 더함
            mon++;  // 다음 월로 이동
            day = 0;  // 일 수 초기화
        }

        // 종료 월에 도달한 경우 남은 일 수를 더함
        if (mon == end_mon) {
            result += end_day - day;
        }

        System.out.println(result); // 결과 출력
    }
}

 

3. 날짜와 시간 간의 차이 계산

이번에는 2011년 11월 11일 11시 11분에서 2011년 12월 13일 00시 20분까지의 시간 차이를 분 단위로 계산해봅시다.
두 시각을 각각 분 단위로 변환한 후, 그 차이를 계산하는 방식입니다.

 

만약 2011년 11월 11일 11분에서 2011년 12월 13일 20분까지의 시간 차이를 분 단위로 계산한다고 가정해 봅시다.

 

  • 11월에서 12월까지는 1개월 차이가 있습니다.
  • 한 달의 기준을 30일로 잡으면, 한 달을 분으로 변환하는 공식은 다음과 같습니다:

 

1달 = 30일 × 24시간 × 60분 = 43,200분

 

즉, 11월에서 12월로 넘어가는 시간 차이는 43,200분입니다.

 

아래와 같이 월, 일, 시간등을 계산할 수 있습니다.

  설명 & 식 한 달의 총 분 수
월 (3개월을 분) 3개월을 분으로 변환해보자.
월 * 한달 일 수 * 24시간 * 60분
3 * 30 * 24 * 60 = 129,600분
6일을 분으로 변환해보자.
일 * 24시간 * 60분
6 * 24 * 60 = 8,640분
시간 30시간을 분으로 변환해보자.
시간 * 60분
30 * 60 = 1800분

 

📄 코드 예시

import java.util.*;

public class Main {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);

        int end_day = sc.nextInt();  // 종료 일 입력
        int end_hour = sc.nextInt(); // 종료 시 입력
        int end_mins = sc.nextInt(); // 종료 분 입력

        int day = 11;   // 기준 날짜: 11일
        int hour = 11;  // 기준 시간: 11시
        int mins = 11;  // 기준 분: 11분

        // 분 단위로 시각을 변환하여 차이 계산
        int result = ((end_day * 24 * 60) + (end_hour * 60) + end_mins) -
                     ((day * 24 * 60) + (hour * 60) + mins);

        // 결과가 음수인 경우 (-1 출력)
        if (result < 0) {
            System.out.println(-1);
        } else {
            System.out.println(result);  // 결과 출력
        }
    }
}

 

이번 포스팅에서는 시간과 날짜 간의 차이를 시뮬레이션 방식으로 계산하는 방법에 대해 설명했습니다. 분 단위, 일 단위로 하나씩 증가시키는 방식은 직관적이면서도 다양한 문제에서 활용할 수 있습니다.

 

사실, 저도 코딩 테스트나 문제 풀이 중에 날짜와 시간과 관련된 문제가 나오면 항상 헷갈리곤 했습니다. "어떻게 차이를 계산해야 할까?"를 고민하면서 알고리즘을 짜느라 시간을 많이 허비했던 경험이 많아요. 😅 그래서 이번에 한 번 정리해 두면 좋겠다 싶어 이렇게 포스팅하게 되었습니다.

 

여러분들도 시간 관련 문제를 만나면 당황하지 말고, 오늘 정리한 내용을 참고해서 쉽게 풀어 보세요! 그럼 즐거운 코딩 되세요! 🙌✨