juuuding

[백준] #1267 휴대폰 요금 본문

알고리즘/백준 문제 풀이

[백준] #1267 휴대폰 요금

jiuuu 2023. 3. 17. 18:54

 문제

 

[문제 링크]

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

 

1267번: 핸드폰 요금

동호가 저번 달에 이용한 통화의 개수 N이 주어진다. N은 20보다 작거나 같은 자연수이다. 둘째 줄에 통화 시간 N개가 주어진다. 통화 시간은 10,000보다 작거나 같은 자연수이다.

www.acmicpc.net

 

[문제]

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

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

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

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

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

 

[입력]

동호가 저번 달에 이용한 통화의 개수 N이 주어진다. N은 20보다 작거나 같은 자연수이다. 둘째 줄에 통화 시간 N개가 주어진다. 통화 시간은 10,000보다 작거나 같은 자연수이다.

 

[출력]

첫째 줄에 싼 요금제의 이름을 출력한다. 그 후에 공백을 사이에 두고 요금이 몇 원 나오는지 출력한다. 만약 두 요금제의 요금이 모두 같으면 영식을 먼저 쓰고 민식을 그 다음에 쓴다.

영식은 Y로, 민식은 M으로 출력한다.

 

[예제 입출력]

[예제 입력 1 복사]

3
40 40 40

[예제 출력 1 복사]

M 45
  • 영식: 20 + 20 + 20 = 60
  • 민식: 15 + 15 + 15 = 45

 

[예제 입력 2 복사]

3
61 61 61

[예제 출력 2 복사]

Y M 90

 

[예제 입력 3 복사]

2
61 10

[예제 출력 3 복사]

Y 40
  • 영식: 30 + 10 = 40
  • 민식: 30 + 15 = 45

 

[예제 입력 4 복사]

2
60 65

[예제 출력 4 복사]

Y M 60
  • 영식: 30 + 30 = 60
  • 민식: 30 + 30 = 60

 

 풀이 방법

 

[변수]

youngBill : 영식 요금제 사용 시 청구되는 요금

minBill: 민식 요금제 사용 시 청구되는 요금

call: 동호가 저번 달 이용한 통화 개수

time: 각 통화 시간

 

[풀이법]

Step1. call 변수에 통화 개수를 입력 받고 그 개수만큼 각 통화의 시간인 time을 입력 받는다. 입력을 받으면서 각 요금제 별로 총 요금을 계산하도록 한다.

 

Step2. time을 다 입력 받고 나서 두 요금제를 비교하여 더 적은 요금이 나온 것을 출력한다.

 

 

 작성 코드

import java.lang.*;
import java.util.Scanner;

public class PhoneBill {
    public static void main(String[] args) {

        Scanner sc = new Scanner(System.in);

        int youngBill=0;
        int minBill=0;
        int call = sc.nextInt();    //통화 개수
        int time;    //통화 시간
        int i;

        //통화 수 만큼 통화 시간 입력 받고 각각 요금제 계산
        for(i=0 ; i < call ; i++) {
            time = sc.nextInt();
            youngBill+=((time/30)+1)*10;
            minBill+=((time/60)+1)*15;
        }

        //요금이 더 작게 나온 요금제 선택
        if(youngBill < minBill) {
            System.out.println("Y "+youngBill);
        }
        else if(youngBill > minBill) {
            System.out.println("M "+minBill);
        }
        else {
            System.out.println("Y M "+minBill);
        }

        sc.close();

    }



}

'알고리즘 > 백준 문제 풀이' 카테고리의 다른 글

[백준] #1427 소트인사이드  (0) 2023.03.25
[백준] #1026 보물  (0) 2023.03.22
[백준] #2564 경비원  (0) 2023.03.19
[백준] #2164 카드2  (0) 2023.03.18
[백준] #1236 성 지키기  (0) 2023.03.17