끄적끄적 코딩
article thumbnail

시뮬레이션 문제입니다

PC방 요금을 최소한으로 냈을 때 금액을 출력해야합니다.

2가지 방법이 있습니다.
1. 1시간에 1000원 지불
2. 22:00 ~ 08:00 5000원 지불

10시~3시의 경우 남은시간이 5시간 이상이면 2번을 실행하고
그 외에는 전부 1번으로 진행해서 계산해주었습니다.

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.util.ArrayList;
import java.util.StringTokenizer;

public class Main {
  public static void main(String[] args) throws Exception {
    BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
    BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));

    int ts = Integer.parseInt(br.readLine());

    for (int t = 0; t < ts; ++t) {
      StringTokenizer st = new StringTokenizer(br.readLine());
      String s = st.nextToken();
      String[] time = s.split(":");
      int curTime = Integer.parseInt(time[0]) * 60 + Integer.parseInt(time[1]);
      int useTime = Integer.parseInt(st.nextToken());
      int result = 0;

      while (useTime > 0) {
        if (curTime < 180) {
          if (useTime > 240) {
            useTime -= 480 - curTime;
            curTime = 481;
            result += 5;
          } else {
            result += (useTime + 59) / 60;
            useTime = 0;
          }
        } else if (curTime >= 1320) {
          if (useTime > 240) {
            useTime -= (1440 - curTime + 480);
            curTime = 481;
            result += 5;
          } else {
            result += (useTime + 59) / 60;
            useTime = 0;
          }
        } else {
          useTime -= 60;
          curTime += 60;
          result += 1;
        }
      }
      result *= 1000;
      bw.write(result + "\n");
    }

    bw.close();
  }
}

검색 태그