728x90
문제 : 백준 2884번 : 알람 시계
풀이 과정
문제 조건
- 입력 첫 줄 : int 2ea
- h : hour 0~23
- m : minute 0~59
- 시간표시 : 24시간 형태
- 불필요한 0표시 x
- 첫째 줄에 상근이가 창영이의 방법을 사용할 때, 설정해야 하는 알람 시간을 출력한다
brain Storming
입력된 설정 시간보다 시간이 빨라야함(값이 작아야함)
-45 한다고하면 hour가 -1되는 경우와 -1시가 되는 경우가 고려되어야함
해설
1. 분(min)이 -1이하가 되는 경우
- 0분에서 -되면 59부터 시작해야함 ex)2시30분-45분=1시45분가 되게 해야함
+60하면 된다
30-45=45 // 30-45=-15+60 = 45
20-45=35 // 20-45=-25+60 = 35
10-45=25 // 10-45=-35+60 = 25
00-45=15 // 00-45=-45+60 = 15
2. 시(hour)에 -1해야되는 경우 고려
- if로 min을 -45해서 h의값이 0이하일 때 -1이면, 23으로 가게해야함
0:30-45=23:45 //
h값 범위 0~23
0-1 = -1 + 24 = 23
1-1 = 0 + 24 = 24 // 24시는 0시로 표시해야함
2-1 = 1 + 24 = 25 // 여기부터는 실질적으로 1시이므로 +24 할 필요 없음
3-1 = 2 + 24 = 26
...
23-1 = 22 + 24 = 46
hour -1해서 값이 -인 경우에만 +24하거나 그냥 hour를 if조건줘서 23으로 지정하면 됨
정답
import java.io.InputStreamReader;
import java.io.BufferedReader;
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 hour = 0;
int min = 0;
while(st.hasMoreTokens()){
hour = Integer.parseInt(st.nextToken());
min = Integer.parseInt(st.nextToken());
}
if((min-45) < 0 ){
hour = hour-1;
min = min - 45 + 60;
if(hour < 0){
hour = hour + 24;
}
System.out.println(hour + " " + min);
}
else {
System.out.println(hour + " " + (min - 45));
}
}
}
다른 코딩 방식
// if(min < 45){
// if((min-45) < 0 ){
// hour = hour-1;
// hour--;
// min = min - 45 + 60;
// min = 60 - (45 - min);
// if(hour < 0){
// hour = hour + 24;
// hour = 23;
// }
// }
728x90
반응형
'코딩테스트' 카테고리의 다른 글
[코딩테스트] Java의 콘솔에서 여러 줄 입력 읽기 (0) | 2022.11.12 |
---|---|
[코딩테스트] 입력, 출력값도 같은 값이고 로직도 맞는 것 같은데 틀리다고 나온다면...? (0) | 2022.11.11 |
[코딩테스트][백준] Step2-4 14681번 : 사분면 고르기 (0) | 2022.10.10 |
[코딩테스트][백준] Step2-3 2753번 : 윤년 (1) | 2022.09.30 |
[코딩테스트][백준] Step1-10 3003번 : 킹, 퀸, 룩, 비숍, 나이트, 폰(feat.약간 다른 로직) (0) | 2022.09.29 |