본문 바로가기
알고리즘 풀이

[백준]2884번:알람시계 - java 풀이

by 코디드 2023. 3. 26.

시간 계산 관련 조건문 문제다.

분의 경우 0분부터 44분까지와 45분부터 59분까지를 구분할수 있어야되고,

시간의 경우 0시에 관련된 처리를 어떻게 할지 생각해내야 한다. 

 

 

 

 

H==0시를 기준으로 구분한 풀이

 

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 H = Integer.parseInt(st.nextToken());
		int M = Integer.parseInt(st.nextToken());
		
		if(H==0) {
			if(M<45) {
				H = 23;
				M = M+15;
			}else {
				M = M-45;
			}
		}else {
			if(M<45) {
				H = H-1;
				M = M+15;
			}else {
				M = M-45;
			}
		}
		
		System.out.println(H + " " + M);
	}
}

 

H가 0시일 경우 별도로 설정을 안해주면 45분 이전으로 설정할때 -1 시로 나오므로 23시가 나오게 만들어주고

0분부터 44분까지는 45분 전으로 알람을 설정할때 60 - (45-M) 이므로 M+15이다.

45분부터 59분까지는 H값은 바뀌지 않고 M=M-45를 하면 된다.

 

H가 1~23시일 때는 H-1; 또는 H--;를 설정해주고 나머지는 위와 똑같이 써준다

 

 

 

 

 

 

M<45를 기준으로 구분한 풀이

 

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 H = Integer.parseInt(st.nextToken());
		int M = Integer.parseInt(st.nextToken());
		
		if(M<45) {
			H--;
			M = 60-(45-M);
			if(H<0) {
				H=23;
			}
		}else {
			M = M-45;
		}
		System.out.println(H + " " + M);
	}
}

 

45분 전으로 알람을 맞추므로, H는 무조건 H-1; or H--; 로 설정하고

H<0 일때, 즉, 0시를 입력받아 -1시가 값으로 나올때 H를 23으로 설정해주면 된다.

if else 문에서는 M이 45~59분일 때인데, 이때는 H값은 안바뀌고 M=M-45를 해준다.