https://www.acmicpc.net/problem/2884
2884번: 알람 시계
상근이는 매일 아침 알람을 듣고 일어난다. 알람을 듣고 바로 일어나면 다행이겠지만, 항상 조금만 더 자려는 마음 때문에 매일 학교를 지각하고 있다. 상근이는 모든 방법을 동원해보았지만,
www.acmicpc.net
주의점
- 시간 : 24시간으로 표현
- 입력 : 공백 한 칸을 기준으로 구분 후 입력
- 출력 : 불필요한 0 사용 X
알고리즘
- 분침 : 숫자 45 미만이라면 - if(min < 45)
- 분침 : 60 - (45 - 입력값)
- 시침 : 0보다 작다면 - if(hour < 0)
- 분침 : 45 이상이라면 - else
- 분침 : 입력값 - 45
입력 방식
1. Scanner
2. BufferedReader
2.1. 문자열 받는 대표적인 방법
- read(): 한 문자만 읽어오기
- readLine(): 한 행 읽어오기(사용 권장)
- readLine()은 한 행을 전부 읽기에 공백 단위로 입력해준 문자열을 다시 공백 단위로 분리해줘야 함
2.2. 문자열 분리 방법
2.2.1. StringTokenizer 클래스
- split()보다 성능 좋음(단순 규칙으로 문자열 분리하거나 데이터가 더 많아질 때 추천)
2.2.2. split()
2.3. 형변환 주의점
- StringTokenizer 클래스와 split() 모두 문자열을 반환하기에 자료형 타입 확인 후 형변환 유의하기
- double형으로 풀면 나머지가 정수로 나와도 소수점까지 같이 출력되어 오답으로 처리됨
출력 방식
- System.out.println()
- StringBuilder() + System.out.println() : 출력값이 많아질수록 성능 better
풀이
1. Scanner + if 문
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--;
M= 60 - (45 - M);
if(H < 0) {
H = 23;
}
System.out.println(H + " " + M);
} else {
System.out.println(H + " " + (M - 45));
}
}
}
2. BufferedReader + if 문
2.1. BufferedReader + StringTokenizer 클래스 + if 문
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));
//long ver.
String str = br.readLine();
StringTokenizer st = new StringTokenizer(str," "); //문자열 분리
//short ver.
StringTokenizer st = new StringTokenizer(br.readLine();," ");
//문자열 ➡ 정수 형변환
int H = Integer.parseInt(st.nextToken());
int M = Integer.parseInt(st.nextToken());
//조건
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));
}
}
}
2.2. BufferedReader + split() + if 문
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));
}
}
}
2.3. BufferedReader + StringTokenizer 클래스 / split() + StringBuilder + if 문
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;
} else {
H--;
}
sb.append(H).append(' ');
sb.append(M = 60 - (45 - M));
} else {
sb.append(H).append(' ').append(M - 45);
}
System.out.println(sb);
}
}
성능
- BufferedReader > Scanner
'Algorithm > Baekjoon' 카테고리의 다른 글
[백준] 2739번 : 구구단 - Java (0) | 2022.02.17 |
---|---|
[백준] 2480번 : 주사위 세 개 - Java (0) | 2022.02.17 |
[백준] 14681번: 사분면 고르기 - Java (0) | 2022.02.15 |
[백준] 2753번 : 윤년 - Java (0) | 2022.02.14 |
[백준] 9498번 : 시험 성적 - Java (0) | 2022.02.10 |
댓글