{ }codelper
삼항 연산자P0372

보관함 추가 요금

기차역 물품 보관함의 기본 요금은 b원이다. 짐을 맡긴 시간이 h시간 이하이면 추가 요금이 없다(0원). 맡긴 시간이 h시간보다 길면 추가 요금 e원을 한 번만 더 낸다. 첫 줄에 b, h, e가 빈칸 하나로 띄워 주어진다. 둘째 줄에 손님 수 n이 주어진다. 다음 n줄에 손님마다 짐을 맡긴 시간 t가 한 줄에 하나씩 주어진다. 손님마다 내야 할 요금(기본 요금 + 추가 요금)을 입력 차례대로 한 줄에 하나씩 출력하라.

입력
1 ≤ b ≤ 10,000, 1 ≤ h ≤ 100, 1 ≤ e ≤ 10,000, 1 ≤ n ≤ 100, 1 ≤ t ≤ 200(모두 정수)
출력
n줄에 손님마다 요금을 하나씩.
쉼표나 단위 없이 숫자만 쓴다
예시 1 · stdin
1000 3 500
3
2
3
5
stdout
1000
1000
1500
예시 2 · stdin
700 24 700
2
24
25
stdout
700
1400
main.py
입력(stdin)

실행하면 이 줄들이 차례로 input()·표준 입력으로 들어가요(실행 중에 묻지 않아요).

$ 준비됐어요

코드를 입력해 풀려면 PC에서 열어 주세요. 모바일에서는 문제와 풀이를 볼 수 있어요.

다른 언어로는?언어별 풀이 보기 · 8개 언어 풀이

삼항 연산자는 두 값 가운데 하나를 골라 주는 식이라서 덧셈 안에 바로 넣을 수 있어요.
C·C++·Java·C#·JS·TS·크레이콘은 조건 ? 참일 때 값 : 거짓일 때 값 차례라서 b + (t <= h ? 0 : e)로 쓰고, Python만 참일 때 값 if 조건 else 거짓일 때 값 차례라서 b + (0 if t <= h else e)로 써요.
함정 하나: 괄호를 빼면 +가 먼저 묶여요.
C·C++·Java·C#·JS·TS·크레이콘에서 b + t <= h ? 0 : e는 (b + t <= h) ? 0 : e로 읽혀서 요금이 0 아니면 e가 돼요(예시 1이 500 500 500).
Python에서 b + 0 if t <= h else e는 (b + 0) if t <= h else e로 읽혀서 시간을 넘긴 손님이 e만 내요(예시 1이 1000 1000 500).
함정 둘: 삼항 연산자 대신 JS (t <= h && 0) || e나 Python t <= h and 0 or e로 흉내 내면, 앞의 값 0이 거짓으로 여겨져서 조건이 참이어도 e가 나와요(예시 1이 1500 1500 1500).
함정 셋: 'h시간 이하'는 <=예요.
<로 쓰면 딱 h시간 맡긴 손님도 추가 요금을 내요(예시 1이 1000 1500 1500).

Pythonmain.py · 7 줄
b, h, e = map(int, input().split())n = int(input())for _ in range(n):    t = int(input())    # 값 if 조건 else 값 — 덧셈 안에 넣을 때는 괄호로 묶는다    fee = b + (0 if t <= h else e)    print(fee)
JavaScriptmain.js · 10 줄
const nums = require("fs").readFileSync(0, "utf8").trim().split(/\s+/).map(Number);const [b, h, e, n] = nums;const out = [];for (let i = 0; i < n; i++) {  const t = nums[4 + i];  // 조건 ? 값 : 값 — 덧셈 안에 넣을 때는 괄호로 묶는다  const fee = b + (t <= h ? 0 : e);  out.push(fee);}console.log(out.join("\n"));
TypeScriptmain.ts · 11 줄
import { readFileSync } from "node:fs";const nums: number[] = readFileSync(0, "utf8").trim().split(/\s+/).map(Number);const [b, h, e, n] = nums;const out: number[] = [];for (let i = 0; i < n; i++) {  const t: number = nums[4 + i];  // 조건 ? 값 : 값 — 덧셈 안에 넣을 때는 괄호로 묶는다  const fee: number = b + (t <= h ? 0 : e);  out.push(fee);}console.log(out.join("\n"));
JavaMain.java · 15 줄
import java.util.Scanner; public class Main {    public static void main(String[] args) {        Scanner sc = new Scanner(System.in);        int b = sc.nextInt(), h = sc.nextInt(), e = sc.nextInt();        int n = sc.nextInt();        for (int i = 0; i < n; i++) {            int t = sc.nextInt();            // 조건 ? 값 : 값 — 덧셈 안에 넣을 때는 괄호로 묶는다            int fee = b + (t <= h ? 0 : e);            System.out.println(fee);        }    }}
C#Main.cs · 18 줄
using System; class Program{    static void Main()    {        string[] head = Console.ReadLine().Split(' ', StringSplitOptions.RemoveEmptyEntries);        int b = int.Parse(head[0]), h = int.Parse(head[1]), e = int.Parse(head[2]);        int n = int.Parse(Console.ReadLine());        for (int i = 0; i < n; i++)        {            int t = int.Parse(Console.ReadLine());            // 조건 ? 값 : 값 — 덧셈 안에 넣을 때는 괄호로 묶는다            int fee = b + (t <= h ? 0 : e);            Console.WriteLine(fee);        }    }}
C++main.cpp · 13 줄
#include <iostream> int main() {    int b, h, e, n;    std::cin >> b >> h >> e >> n;    for (int i = 0; i < n; i++) {        int t;        std::cin >> t;        // 조건 ? 값 : 값 — 덧셈 안에 넣을 때는 괄호로 묶는다        int fee = b + (t <= h ? 0 : e);        std::cout << fee << "\n";    }}
Cmain.c · 14 줄
#include <stdio.h> int main(void) {    int b, h, e, n;    if (scanf("%d %d %d %d", &b, &h, &e, &n) != 4) return 0;    for (int i = 0; i < n; i++) {        int t;        if (scanf("%d", &t) != 1) return 0;        /* 조건 ? 값 : 값 — 덧셈 안에 넣을 때는 괄호로 묶는다 */        int fee = b + (t <= h ? 0 : e);        printf("%d\n", fee);    }    return 0;}
Craykonmain.cray · 12 줄
head = 콘솔.수들읽기();b = head[0];h = head[1];e = head[2];n = 콘솔.줄읽기().수로변환();반복 (i = 0; i < n; i++){    t = 콘솔.줄읽기().수로변환();    // 조건 ? 값 : 값 — 덧셈 안에 넣을 때는 괄호로 묶는다    fee = b + (t <= h ? 0 : e);    콘솔.쓰기(fee);}