알고리즘 풀이
[백준]2525번:오븐 시계 - java 풀이
코디드
2023. 3. 27. 23:14
풀이1)
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;
public class Main {
public static void main(String[] args) throws IOException{
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st = new StringTokenizer(br.readLine(), " ");
int A = Integer.parseInt(st.nextToken());
int B = Integer.parseInt(st.nextToken());
int C = Integer.parseInt(br.readLine());
int min = B+C;
int n= min/60;
if(min>=60) {
A += n;
min -= 60*n;
if(A>=24) {
A -= 24;
}
}else {
}
System.out.println(A+" "+min);
}
}
A는 시간, B는 분이고, 요리하는데 필요한 C 또한 분이어서 B+C를 min으로 정의하였다
B+C를 60으로 나눈 정수 값을 n으로 정의하고,
분이 0~59분이므로 더한 값이 60분이 넘어가면 60*n 만큼 빼주고 시간인 A에는 n만큼 더해줬다.
A가 0~23시까지이므로 범위를 넘어가면 24만큼 빼주는것도 추가했다.
이경우 C의 최댓값이 1000이므로 B의 최댓값 59와 더한 1059는 17시간 39분으로서
시간 A의 최댓값 23과 더해도 40이므로 24만 빼주면 된다.
%을 이용한 풀이2)
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;
public class Main {
public static void main(String[] args) throws IOException{
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st = new StringTokenizer(br.readLine(), " ");
int A = Integer.parseInt(st.nextToken());
int B = Integer.parseInt(st.nextToken());
int C = Integer.parseInt(br.readLine());
int min = B+C;
int n= min/60;
if(min>=60) {
A = (A + n)%24;
min -= 60*n;
}else {
}
System.out.println(A+" "+min);
}
}
이 문제의 경우 풀이가 이전 풀이와 전부 같은데
시간을 24로 나눈 나머지 값, '(A+n)%24' 은 시간이 어떤 값이든 상관없이 (0~23 사이 또는 그이상일때도, 한마디로 항상)
0~23 사이의 값을 주고, 그 뒤에 오는 조건문을 쓰지 않아도 되게 해준다.
다른 풀이 방법으로는
A시간 B분을 아예 분으로 바꿔서 C와 더해주거나
C를 시와 분으로 바꿔서 A시간 B분에 더해주는 방법이 있다.
그래도 이전에 이 문제를 풀때는 if절을 십 수개를 만들어서 일일이 조건문을 써주는 정말 일차원적인 풀이밖에 생각해내지 못했는데 이번에는 나름 깔끔한 방식으로 풀어내서 기분이 좋다.