문제 링크 : https://www.acmicpc.net/problem/13223
난이도 |
알고리즘 | |
![]() |
브론즈3 | 수학, 구현, 사칙연산 |
1. 요구 사항 이해
시간, 메모리 제한 : 2초 / 512MB
현재 시각으로부터 동작 시각까지의 인터벌을 구하시오
현재 시각 hh:mm:ss 포맷 (0 ≤ h ≤ 23), (0 ≤ m ≤ 59) , (0 ≤ s ≤ 59)
소금 투하 시각 hh:mm:ss
두 시각의 차이 (1초 ≤ interval ≤ 24시간)
2. 설계/검증
입력
입력받은 시각을 파싱
- split() 사용 입력받은 시간
차이 계산
음수 보정
시, 분, 초 변수를 출력 hh:mm:ss 포맷 형태로 출력
- System.out.printf("%02d:%02d:%02d", hh, mm, ss)
시간 복잡도 | 최악의 경우 | 공간 복잡도 |
O(1) | -- | O(1) |
3. 정상 코드
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
// Scanner 객체를 사용하여 입력값을 받음
Scanner scanner = new Scanner(System.in);
String currentTimeString = scanner.nextLine();
String saltTimeString = scanner.nextLine();
scanner.close();
// 현재 기간과 소음이 투하될 시간을 파싱하여 시,분,초로 나눔
String[] currentTimeArray = currentTimeString.split(":");
int currentHour = Integer.parseInt(currentTimeArray[0]);
int currentMinute = Integer.parseInt(currentTimeArray[1]);
int currentSecond = Integer.parseInt(currentTimeArray[2]);
String[] saltTimeArray = saltTimeString.split(":");
int saltHour = Integer.parseInt(saltTimeArray[0]);
int saltMinute = Integer.parseInt(saltTimeArray[1]);
int saltSecond = Integer.parseInt(saltTimeArray[2]);
// 현재 시각과 소금 투하 시간의 시, 분, 초 차이 계산
int diffHour = saltHour - currentHour;
int diffMinute = saltMinute - currentMinute;
int diffSecond = saltSecond - currentSecond;
// 초가 음수일 경우, 분에서 차감하고 60일 더해줌
if (diffSecond < 0) {
diffSecond += 60;
diffMinute--;
}
// 분이 음수일 경우, 시에서 차감하고 60을 더해줌
if (diffMinute < 0) {
diffMinute += 60;
diffHour--;
}
//시가 음수일 경우, 24를 더해줌
if (diffHour < 0) {
diffHour += 24;
}
// 결과를 형식에 맞추어 출력
System.out.printf("%02d:%02d:%02d", diffHour, diffMinute, diffSecond);
}
}
4. 처리 과정 추적 코드
import java.util.Arrays;
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
String currentTimeString = scanner.nextLine();
String saltTimeString = scanner.nextLine();
scanner.close();
System.out.println("\n[입력]----------------------------------");
System.out.println("현재 시각 문자열 : " + currentTimeString);
System.out.println("투하 시각 문자열 : " + saltTimeString);
String[] currentTimeArray = currentTimeString.split(":");
System.out.println("\n[파싱]----------------------------------");
System.out.println("현재 시각 파싱 문자열 -> 배열 " + Arrays.toString(currentTimeArray));
int currentHour = Integer.parseInt(currentTimeArray[0]);
int currentMinute = Integer.parseInt(currentTimeArray[1]);
int currentSecond = Integer.parseInt(currentTimeArray[2]);
System.out.println("현재 시각. 시 : " + currentHour + ", 분 : " + currentMinute + ", 초 : " + currentHour);
String[] saltTimeArray = saltTimeString.split(":");
System.out.println("\n투하 시각 파싱 문자열 -> 배열 " + Arrays.toString(saltTimeArray));
int saltHour = Integer.parseInt(saltTimeArray[0]);
int saltMinute = Integer.parseInt(saltTimeArray[1]);
int saltSecond = Integer.parseInt(saltTimeArray[2]);
System.out.println("투하 시각. 시 : " + saltHour + ", 분 : " + saltMinute + ", 초 : " + saltSecond);
int diffHour = saltHour - currentHour;
int diffMinute = saltMinute - currentMinute;
int diffSecond = saltSecond - currentSecond;
System.out.println("\n[계산]----------------------------------");
System.out.println("시각 차이. 시 : " + diffHour + "분 : " + diffMinute + "초 : " + diffSecond);
System.out.println("\n[음수 보정]----------------------------------");
System.out.println("초가 음수일 경우, 분에서 차감하고 60일 더해줌");
System.out.println("시각 차이. 시 : " + diffHour + "분 : " + diffMinute + "초 : " + diffSecond);
if (diffSecond < 0) {
diffSecond += 60;
diffMinute--;
System.out.println("*음수 보정. 시 : " + diffHour + "분 : " + diffMinute + "초 : " + diffSecond);
}
System.out.println("\n분이 음수일 경우, 시에서 차감하고 60을 더해줌");
System.out.println("시각 차이. 시 : " + diffHour + "분 : " + diffMinute + "초 : " + diffSecond);
if (diffMinute < 0) {
diffMinute += 60;
diffHour--;
System.out.println("*음수 보정. 시 : " + diffHour + "분 : " + diffMinute + "초 : " + diffSecond);
}
System.out.println("\n시가 음수일 경우, 24를 더해줌");
System.out.println("시각 차이. 시 : " + diffHour + "분 : " + diffMinute + "초 : " + diffSecond);
if (diffHour < 0) {
diffHour += 24;
System.out.println("*음수 보정. 시 : " + diffHour + "분 : " + diffMinute + "초 : " + diffSecond);
}
System.out.printf("\n결과 : %02d:%02d:%02d", diffHour, diffMinute, diffSecond);
}
}
'◖코딩 테스트◗▬▬▬▬▬▬▬▬▬ > 백준' 카테고리의 다른 글
[백준](2024) 성 지키기 (설명/코드/정답) (0) | 2024.02.20 |
---|---|
[백준](2024) ✔️개미 (설명/코드/정답) (0) | 2024.02.20 |
[백준](2024) 문서 검색 (설명/코드/정답) (0) | 2024.02.20 |
[백준](2024) 단어 공부 (설명/코드/정답) (0) | 2024.02.19 |
[백준](2024)애너그램 만들기(설명/코드/정답) (0) | 2024.02.19 |