알고리즘 풀이

[백준]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절을 십 수개를 만들어서 일일이 조건문을 써주는 정말 일차원적인 풀이밖에 생각해내지 못했는데 이번에는 나름 깔끔한 방식으로 풀어내서 기분이 좋다.