-
[백준/BOJ] 3029번 : 경고 (JAVA / 자바)백준 2022. 2. 3. 21:44
안녕하세요~ 코딩하는 코알못 코메인입니다.
https://www.acmicpc.net/problem/3029
- 문제 -
난이도 브론즈 3 문제이다.
자바에서 입력방식은 scanner와 bufferedreader가 있다.
자바를 초반에 접하면 처음에 배우는 입력은 scanner이다. scanner가 bufferedreader보다 편하지만 속도가 느리다.
bufferedreader는 무조건 문자열로 받아오기때문에 정수형이나 실수형 변수에 저장하기 위해서는 입력과 형변환을 해줘야한다.
더 자세한 내용은 아래 글 참고 하면 좋다.
풀이 방법
각 시간을 split을 이용해 string 배열에 저장한다. 연산을 위해 int로 변환해야 하기에 int 배열에 저장하는데 시간의 차를 구해야하니 int 배열에 저장하면서 두 시간을 서로 빼서 저장한다.
다음으로 넘어가기전에 if문으로 두 시간이 같다면 24:00:00 출력하는 조건문을 만든다. 만들지 않는다면 00:00:00이 출력될 것이기 때문이다.
저 조건을 이어서 아닐경우에 다음 내용을 넣는다.
시 분 초로 나뉘어 지는데 초부터 시작해서 음수가 나오게 되면 초는 60 분도 60 시는 24를 각각 조건에 맞춰 넣어준다. 여기서 주의할 건 초와 분은 음수이면 다음 단위인 초가 음수이면 분에서 -1해주고 분이 음수이면 시에서 -1 해준다.
출력할때는 00:00:00 식으로 출력되어야하기 때문에 System.out.format 또는 System.out.printfd를 사용한다.
방법은 코드로 보자.
-풀이-
import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; public class Main { public static void main(String[] args) throws IOException { BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); String S = br.readLine(); String S2 = br.readLine(); String[] s = S.split(":"); String[] s2 = S2.split(":"); int[] N = new int[3]; //int형으로 형변환 하면서 시간의 차를 시 분 초 기준으로 저장한다. for(int i = 0; i < 3; i++) { N[i] = Integer.parseInt(s2[i]) - Integer.parseInt(s[i]); } if(S.equals(S2)) { System.out.println("24:00:00"); }else { if(N[2] < 0) { N[2] += 60; N[1]--; } if(N[1] < 0) { N[1] += 60; N[0]--; } if(N[0] < 0) { N[0] += 24; } //00:00:00방식으로 출력하기 위한 포맷 System.out.format("%02d:%02d:%02d", N[0], N[1], N[2]); } } }
-결과-
아직 코딩 공부가 부족한 필자라 설명과 풀이 방법이 많이 미흡할 수 있다. 코딩 고수들은 보시고 문제점이 있다면 댓글로 말해주시면 감사한 마음으로 참고 수정 하겠다.
'백준' 카테고리의 다른 글
[백준/BOJ] 4388번 : 받아올림 (JAVA / 자바) (0) 2022.02.04 [백준/BOJ] 4153번 : 직각삼각형 (JAVA / 자바) (0) 2022.02.04 [백준/BOJ] 4101번 : 크냐? (JAVA / 자바) (0) 2022.02.03 [백준/BOJ] 3460번 : 이진수 (JAVA / 자바) (0) 2022.02.03 [백준/BOJ] 3058번 : 짝수를 찾아라 (JAVA / 자바) (0) 2022.02.03