풀이방법
2022.08.24
테스트케이스 개수가 최대 100개밖에 되지 않아서 그냥 단순하고 무식한 방법으로 해결하였다.
입력값에서 HH와 MM을 얻어오는 데에는 substring을 사용했다.
00시 00분으로부터 몇 분이 지났는지를 시각 값으로 이용함으로써 오전과 오후의 구분을 없애고 요금 계산을 쉽게 하였다.
오전 7시의 시각 값은 7*60 = 420, 오후 7시의 시각 값은 19*60 = 1140이다.
통화 시작 시점의 시각 값을 구해놓고
종료 시점에 이를 때까지 1분씩 더해가면서 요금을 구한다.
현재의 시각 값이 420(7*60) 이상 1140(19*60) 미만이라면 10원을 더하고
그렇지 않다면 5원을 더하는 방식이다.
전화하던 중 날짜가 바뀌었으면 현재의 시각 값을 0으로 만들어주고 계속한다.
EDOC MT 팀대항전에서 푼 문제이다.
코드
Java(2022.08.24)
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;
public class Main {
public static void main(String[] args) throws IOException{
// TODO Auto-generated method stub
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int n = Integer.parseInt(br.readLine());
int sum = 0;
int amseven = 7*60;
int pmseven = 19*60;
for(int i=0; i<n; i++) {
StringTokenizer st = new StringTokenizer(br.readLine());
String time = st.nextToken();
String h = time.substring(0, 2);
String m = time.substring(3, 5);
int hh = Integer.parseInt(h);
int mm = Integer.parseInt(m);
int dd = Integer.parseInt(st.nextToken());
//시작시간을 정수화하기
int start = 60*hh + mm;
//1분씩 dd번 요금 더하기
for(int j=0; j<dd; j++) {
if (start == 24*60) start = 0;
if (amseven<=start && start<pmseven) sum += 10;
else sum +=5;
start++;
}
}
System.out.print(sum);
}
}
'알고리즘 문제풀이 > 백준' 카테고리의 다른 글
#7983 : 내일 할거야 (2) | 2022.11.09 |
---|---|
#5545 : 최고의 피자 (0) | 2022.11.09 |
#10820 : 문자열 분석 (0) | 2022.09.03 |
#5533 : 유니크 (0) | 2022.09.03 |
#1446 : 지름길 (0) | 2022.08.17 |