알고리즘 문제풀이/백준

#3226 : 전화 요금

모항 2022. 9. 3. 19:13

풀이방법

 

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