상냥한 세상 :: [백준]2884번: 알람시계

본문으로 바로가기

[백준]2884번: 알람시계

category Computer Science/BAEKJOON JAVA Practice 2021. 12. 26. 13:17
  • 문제

https://www.acmicpc.net/problem/2884

 

2884번: 알람 시계

상근이는 매일 아침 알람을 듣고 일어난다. 알람을 듣고 바로 일어나면 다행이겠지만, 항상 조금만 더 자려는 마음 때문에 매일 학교를 지각하고 있다. 상근이는 모든 방법을 동원해보았지만,

www.acmicpc.net

'시각'단위인 정수형 H의 범위는 0~23까지, '분'단위인 정수형 M의 범위는 0~59까지이다. 

24시는 0시로 표현되므로 H의 범위는 24가아닌 23까지이다. 60분은 0분으로 초기화되어 표현가능하므로 M의범위는 60분까지가 아닌 59분까지로 표기되어야 한다.

※ 주의할 점
24시간 표현을 사용한다
입력은 공백 한 칸을 기준으로 구분되어 입력된다.
출력시 불필요한 0은 사용하지 않는다.

조건문 프리뷰
1-1:min 분단위가 45보다 작은지 -if(min<45)
    2-1: 예를들어 40분일때 45를빼면 -5분일수는 없다.더군다나 자정인경우00:00인데 -1:00일수도 없다 -if(hour<0)
1-2:1-1의 else


  • 코드1
import java.util.Scanner;
public class Main{
    public static void main(String[] args){
        Scanner in= new Scanner(System.in);
        int H=in.nextInt();
        int M=in.nextInt();
        in.close();
        if(M<45){
            H--;//시(hour) 1감소
            M=60-(45-M);//분(min)감소
            if(H<0){
                H=23;
            }
            System.out.println(H+" "+M);
            
        }
        else{
            System.out.println(H+" "+(M-45));
        }        
    }
}

  • 결과


  • 코드2
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.IOException;



public class Main{
    public static void main(String[] args) throws IOException {
        BufferedReader br=new BufferedReader(new InputStreamReader(System.in));
        
        String[] str=br.readLine().split(" ");
        int H = Integer.parseInt(str[0]);
		int M = Integer.parseInt(str[1]);
		
		if(M < 45) {
			H--;
			M = 60 - (45 - M);
			if(H < 0) {
				H = 23;
			}
			System.out.println(H + " " + M);
		}
		else {
			System.out.println(H + " " + (M - 45));
		}
    }
}

  • 결과


  • 코드3
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.IOException;
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());
		
        StringBuilder sb = new StringBuilder();
		if(M < 45) {
			if(H == 0){
				H = 23;
				sb.append(H).append(' ');
			} else {
				H--;
				sb.append(H).append(' ');
			}
			sb.append(M = 60 - (45 - M));
		}
		else {
			sb.append(H).append(' ').append(M - 45);
		}
 
		System.out.println(sb);
	}
}

  • 결과


  • 코드1,2,3 속도비교

Scanner 사용
BufferedReader+Split사용
BufferedReader+StringTokenizer사용

'Computer Science > BAEKJOON JAVA Practice' 카테고리의 다른 글

[백준]10950번: A+B-3  (0) 2022.01.08
[백준]2739번: 구구단  (0) 2022.01.08
[백준]14681번: 사분면 고르기  (0) 2021.12.26
[백준]2753번: 윤년계산  (0) 2021.12.26
[백준]9498번: 시험성적표 출력  (0) 2021.12.26