[시뮬레이션 / 풀이방법] 날짜와 시간
오늘은 코딩테스트에서 볼 수 있는 시간과 날짜 간의 차이를 계산하는 방법에 대해 다뤄보겠습니다.
여기에서는 단순하게 시뮬레이션을 통해 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); // 결과 출력
}
}
}
이번 포스팅에서는 시간과 날짜 간의 차이를 시뮬레이션 방식으로 계산하는 방법에 대해 설명했습니다. 분 단위, 일 단위로 하나씩 증가시키는 방식은 직관적이면서도 다양한 문제에서 활용할 수 있습니다.
사실, 저도 코딩 테스트나 문제 풀이 중에 날짜와 시간과 관련된 문제가 나오면 항상 헷갈리곤 했습니다. "어떻게 차이를 계산해야 할까?"를 고민하면서 알고리즘을 짜느라 시간을 많이 허비했던 경험이 많아요. 😅 그래서 이번에 한 번 정리해 두면 좋겠다 싶어 이렇게 포스팅하게 되었습니다.
여러분들도 시간 관련 문제를 만나면 당황하지 말고, 오늘 정리한 내용을 참고해서 쉽게 풀어 보세요! 그럼 즐거운 코딩 되세요! 🙌✨
'코딩테스트 > 풀이' 카테고리의 다른 글
| [시뮬레이션 / 진법계산] 숫자와 진법 변환 (0) | 2025.02.11 |
|---|