관리 메뉴

Just Do it

[백준/자바] 2884번: 알람 시계 본문

신입 개발자가 되기 위해 공부했던 독학 자료들/Java 연습문제 (백준)

[백준/자바] 2884번: 알람 시계

Seojoo21 2022. 1. 27. 11:57

1. 문제

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

 

2884번: 알람 시계

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

www.acmicpc.net

 

2. 내 코드

 

import java.io.*;

 

public class Ex2884 {

 

public static void main(String[] args) throws NumberFormatException, IOException {

BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

 

String[] time = br.readLine().split(" ");

int h = Integer.parseInt(time[0]);

int m = Integer.parseInt(time[1]);

 

br.close();

 

if (m >= 45) {

int newh = h;

int newm = m-45;

System.out.println(newh + " "+ newm);

} else if (m < 45) {

int newh = h-1;

int newm = m+15;

 

if (newh == -1) {

newh = -1+24;

}

 

System.out.println(newh + " "+ newm);

}

 

}

 

}

 

3. 다시 한번 체크할 부분 

1) 분에 해당하는 변수 int m 에서 m이 45보다 작을 경우,   

1시간에 60분이니까 (45-입력값)의 차이만큼 60에서 빼주면 된다. 즉 , 60 - (45-입력값) 이 된다. 나는 이걸 m+15로 쓴 것일 뿐.  

 

2) 분에 해당하는 변수 int m 에서 m이 45보다 작을 경우,

int newh = h-1; 대신에 h--; 라고 쓸 수 있다. 그리고 이 문제는 굳이 조건문 내에서 새 지역변수 int newh, int newm을 적을 필요 없었다. 수정한 코드는 아래와 같다. 하지만 수행 시간에는 차이가 없어 성능은 비슷한 것 같다. 

 

수정한 코드:

 

import java.io.*;

 

public class Ex2884 {

 

public static void main(String[] args) throws NumberFormatException, IOException {

BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

 

String[] time = br.readLine().split(" ");

int h = Integer.parseInt(time[0]);

int m = Integer.parseInt(time[1]);

 

br.close();

 

if (m < 45) {

h--;   // 시(hour) 1 감소

m = m+15;

if (h==-1) {

h = 23;

}

System.out.println(h + " " + m);

 

} else {

System.out.println(h + " "+ (m-45));

}

 

}

 

}