suheang

[백준] | JAVA, 자바 | 1267번 - 핸드폰 요금 본문

알고리즘

[백준] | JAVA, 자바 | 1267번 - 핸드폰 요금

suheang 2024. 5. 16. 21:09

https://www.acmicpc.net/problem/1267


문제 요약 :

동호는 새악대로 T 통신사의 새 핸드폰 옴머나를 샀다. 새악대로 T 통신사는 동호에게 다음 두 가지 요금제 중 하나를 선택하라고 했다.

  1. 영식 요금제
  2. 민식 요금제

영식 요금제는 30초마다 10원씩 청구된다. 이 말은 만약 29초 또는 그 보다 적은 시간 통화를 했으면 10원이 청구된다. 만약 30초부터 59초 사이로 통화를 했으면 20원이 청구된다.

민식 요금제는 60초마다 15원씩 청구된다. 이 말은 만약 59초 또는 그 보다 적은 시간 통화를 했으면 15원이 청구된다. 만약 60초부터 119초 사이로 통화를 했으면 30원이 청구된다.

 

동호가 저번 달에 새악대로 T 통신사를 이용할 때 통화 시간 목록이 주어지면 어느 요금제를 사용 하는 것이 저렴한지 출력하는 프로그램을 작성


문제 풀이 :

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 {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

        int n = Integer.parseInt(br.readLine());
        StringTokenizer st = new StringTokenizer(br.readLine());
        int[] tell = new int[n];
        int sumY = 0, sumM = 0;

        for (int i = 0; i < n; i++) {
            tell[i] = Integer.parseInt(st.nextToken());
            sumY += yTax(tell[i]);
            sumM += mTax(tell[i]);
        }

        if (sumY > sumM) {
            System.out.println("M " + sumM);
        } else if (sumY < sumM) {
            System.out.println("Y " + sumY);
        } else {
            System.out.println("Y M " + sumY);
        }
    }

    public static int yTax (int n) {
        return ((n / 30) + 1) * 10;
    }

    public static int mTax (int n) {
        return ((n / 60) + 1) * 15;
    }
}

 

1. 통화의 개수 n 개 입력받기

2. 통화요금을 저장할 변수 sumY, sumM 생성

3. n 개만큼 통화 시간 입력받기

4. 입력받은 통화시간을 계산해서 sumY, sumM에 요금을 저장

4 - 1. 입력받은 통화시간을 yTax, mTax를 통해 통화 요금을 계산함.

5. 통화 요금을 비교하고 요구한 조건대로 결과를 출력