2023. 6. 8. 16:06ㆍ프로그래밍/java
백준 홈페이지에서 - 문제 많이 푼 순위별로해서 알고리즘 공부를 하고 있었으며,
그냥 문제만 푸는것보다 어떻게 해결하고, 풀어나갔는지 솔직하게 기록에 남기고
프로그래머로써 성장하려 한다.
이 문제는
입력 시간의 -45분이 되어 출력이 되게 하는것이다.
이전 공부에서 초를 시/분/초로 표현했던 방법이 생각나 그대로 사용해 보았다.
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int H = sc.nextInt();
int M = sc.nextInt();
int hm = H * 60;
int mm = hm + M - 45;
int H1 = mm / 60;
int M1 = mm % 60;
if (0 < H && H <= 23) {
System.out.println(H1 + " " + M1);
}
if (H == 0) {
if (mm < 0) {
int mm1 = 1440 + mm;
int H2 = mm1 / 60;
int M2 = mm1 % 60;
System.out.println(H2 + " " + M2);
}
}
}
}
위 방식은
"시"를 "분"으로 치환해주고 ex) 4시 -> 4 시X 60분 = 240분
나머지 입력된 "분"과 더한뒤 -45분을 하고
다시 "시" 와 "분"으로 구분해 주는 방식을 사용하였다.
사실 너무 원시적이고 복잡하게 생각해 변수를 많이사용한것이 흠이다.
또한 "시"와 "분"의 범위를 정확히 정해주지 않은점이 있다.
또한 위 코드는 오류가 있었다.
반례로
입력 = 0 50
출력 =
위 입력값에 대한 함수를 입력하지 않았던것이다.
따라서
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int H = sc.nextInt();
int M = sc.nextInt();
int hm = H * 60;
int mm = hm + M - 45;
int H1 = mm / 60;
int M1 = mm % 60;
if (0 < H && H <= 23 && 0 < M && M <=59) {
System.out.println(H1 + " " + M1);
}
if (H == 0) {
if (mm < 0) {
int mm1 = 1440 + mm;
int H2 = mm1 / 60;
int M2 = mm1 % 60;
System.out.println(H2 + " " + M2);
} else {
System.out.println(H1 + " " + M1);
}
}
}
}
"분" 범위도 지정해주고
else를 집어넣어 반례가 없도록 코드를 짜보았다
위 코드에서는 정상적으로 출력값이 다 나왔으나
너무 변수를 많이 사용한점에 대해서는 만족스럽지 못해 다른 사람들은 어떻게 해결했는지 확인해 보았다.
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));
}
}
}
출처 : https://st-lab.tistory.com/24
[백준] 2884번 : 알람 시계 - JAVA [자바]
https://www.acmicpc.net/problem/2884 2884번: 알람 시계 문제 상근이는 매일 아침 알람을 듣고 일어난다. 알람을 듣고 바로 일어나면 다행이겠지만, 항상 조금만 더 자려는 마음 때문에 매일 학교를 지각하
st-lab.tistory.com
위 사이트를 보았을때 아주 간단히 표현되었지만
"시"와 "분" 범위가 없어서 아쉬웟지만 앞에 If문으로 범위만 설정해준다면 문제가 없을 뿐더러
아주 간단히 표현을 잘해 깔끔한 코드라고 생각한다.
'프로그래밍 > java' 카테고리의 다른 글
[백준] 10818번 문제 - 최소,최대 - JAVA(자바) (0) | 2023.06.13 |
---|---|
[백준] 27866번 문제 - 문자와 문자열 - JAVA(자바) (2) | 2023.06.09 |
[백준] 2525번 문제 - 오븐 시계 - JAVA(자바) (2) | 2023.06.09 |
[백준] 18108번 문제 - 1998년생인 내가 태국에서는 2541년생?! - JAVA(자바) (0) | 2023.06.09 |
[백준] 10430번 문제 - 나머지 - JAVA(자바) (0) | 2023.06.09 |