(코테) 조건문 활용 (오븐시계)
출처 - 백준 2525번 문제
문제
KOI 전자에서는 건강에 좋고 맛있는 훈제오리구이 요리를 간편하게 만드는 인공지능 오븐을 개발하려고 한다. 인공지능 오븐을 사용하는 방법은 적당한 양의 오리 훈제 재료를 인공지능 오븐에 넣으면 된다. 그러면 인공지능 오븐은 오븐구이가 끝나는 시간을 분 단위로 자동적으로 계산한다.
또한, KOI 전자의 인공지능 오븐 앞면에는 사용자에게 훈제오리구이 요리가 끝나는 시각을 알려 주는 디지털 시계가 있다.
훈제오리구이를 시작하는 시각과 오븐구이를 하는 데 필요한 시간이 분단위로 주어졌을 때, 오븐구이가 끝나는 시각을 계산하는 프로그램을 작성하시오.
입력
첫째 줄에는 현재 시각이 나온다. 현재 시각은 시 A (0 ≤ A ≤ 23) 와 분 B (0 ≤ B ≤ 59)가 정수로 빈칸을 사이에 두고 순서대로 주어진다. 두 번째 줄에는 요리하는 데 필요한 시간 C (0 ≤ C ≤ 1,000)가 분 단위로 주어진다.
출력
첫째 줄에 종료되는 시각의 시와 분을 공백을 사이에 두고 출력한다. (단, 시는 0부터 23까지의 정수, 분은 0부터 59까지의 정수이다. 디지털 시계는 23시 59분에서 1분이 지나면 0시 0분이 된다.)
먼저 내가 제시한 답.
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int A = sc.nextInt();
int B = sc.nextInt();
int C = sc.nextInt();
if((B+C)>60){
if((A + 1) == 24){
A=0
}else{
A += 1
}
B= (B+C)-60
}else{
B = B+C
}
System.out.print(A + " " + B);
}
내가 코드를 작성해지만 너무 못짰다. 알고리즘 공부 안한게 너무 티가 났다.
문제점 1. 문제에서 처음 조건에 A에는 0~24만 들어온다고 제시했는데 필요없이 if절로 초기 A 값이 24를 넘는지 체크한것 (불필요한 코드.)
문제점2. 오븐에 들어올 추가될 시간을 2시간을 넘긴다는 전제를 하지 않은점. C (0 ≤ C ≤ 1,000) 라고 명시해줬지만
무시하고 1차원적으로 코드를 짠것. (확장성 부족)
수정한 코드
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int A = sc.nextInt(); // 시
int B = sc.nextInt(); // 분
int C = sc.nextInt(); // 추가 분
int totalMinutes = A * 60 + B + C;
int hour = (totalMinutes / 60) % 24; // 24시를 넘으면 0으로
int minute = totalMinutes % 60;
System.out.println(hour + " " + minute);
}
}
수정 사항
- 시간을 분 단위로 통합하여 계산한 뒤, 다시 시와 분으로 나누는 방식으로 수정함.
- 이 방식은 다양한 시간 연산에서 확장성과 가독성을 높여주며, 로직을 단순화시켜 실수를 줄이는 데 유리하다.
개인적 고민
- hour, minute 변수를 새로 만들지 않고 기존 A, B에 재할당하면 스택 메모리를 덜 쓰고 공간적으로 효율적이지 않을까 고민했다.
- 하지만 코딩 테스트에서는 이런 수준의 공간 최적화는 점수에 거의 영향을 주지 않으며, 오히려 코드의 명확성과 유지보수성이 더 중요하다고 판단했다.
- 따라서 직관적인 변수명을 사용해 코드의 의도를 분명히 하고, 원본 입력값을 보존하는 쪽을 선택했다.
- 이는 협업이나 리뷰에서도 코드를 쉽게 이해할 수 있도록 돕는다.