티스토리 뷰

상근날드

문제

상근날드에서 가장 잘 팔리는 메뉴는 세트 메뉴이다. 주문할 때, 자신이 원하는 햄버거와 음료를 하나씩 골라, 세트로 구매하면, 가격의 합계에서 50원을 뺀 가격이 세트 메뉴의 가격이 된다.

햄버거는 총 3종류 상덕버거, 중덕버거, 하덕버거가 있고, 음료는 콜라와 사이다 두 종류가 있다.

햄버거와 음료의 가격이 주어졌을 때, 가장 싼 세트 메뉴의 가격을 출력하는 프로그램을 작성하시오.

입력

입력은 총 다섯 줄이다. 첫째 줄에는 상덕버거, 둘째 줄에는 중덕버거, 셋째 줄에는 하덕버거의 가격이 주어진다. 넷째 줄에는 콜라의 가격, 다섯째 줄에는 사이다의 가격이 주어진다. 모든 가격은 100원 이상, 2000원 이하이다.

출력

첫째 줄에 가장 싼 세트 메뉴의 가격을 출력한다.

예제 입력

800
700
900
198
330

예제 출력

848

해설

이 문제는 if문을 사용하여 최솟값을 찾는 것이 관건이다. 버거 3종과 소다 2종의 가격이 각각 한 라인씩 입력되면 6종의 세트 가격을 계산하고 이 중에서 가장 싼 세트의 가격을 출력하면 된다. 간단하게 2줄로 요약하면 아래와 같다.

  1. 버거 3종과 소다 2종의 조합으로 만들 수 있는 각 세트의 가격 계산
  2. 각 세트의 가격 중 가장 낮은 가격 출력

1은 중접된 for문을 이용한다. 첫 번째 for문에서 버거 3종을 순차적으로 돌리고 두 번째 for문에서 소다 2종을 돌리면 조합 가능한 6종의 세트가 완성된다.

2는 위의 for문 안에서 if문을 이용하여 세트 가격을 비교하여 변수에 가장 낮은 가격만을 저장되도록 한다. 이 변수를 마지막에 화면에 출력하면 된다.

    for (i = 0; i < 3; ++i) {
        for (j = 0; j < 2; ++j) {
            temp = burger[i] + soda[j] - 50;
            if(temp < set)
            {
                set = temp;
            }
        }
    }

소스코드: C

#include <stdio.h>

int main(int argc, char *argv[])
{
    int burger[3];
    int soda[2];
    int i, j, temp, set = 2100;

    for (i = 0; i < 3; ++i) {
        scanf("%d", &burger[i]);
    }
    for (j = 0; j < 2; ++j) {
        scanf("%d", &soda[j]);
    }

    for (i = 0; i < 3; ++i) {
        for (j = 0; j < 2; ++j) {
            temp = burger[i] + soda[j] - 50;
            if(temp < set)
            {
                set = temp;
            }
        }
    }
    printf("%d", set);

    return 0;
}

소스코드: python3

burger = list()
soda = list()

for i in range(0, 3):
    burger.append(int(input()))

for i in range(0, 2):
    soda.append(int(input()))

prices = [ (b+s-50) for b in burger for s in soda]

print(min(prices))

이번 파이썬 코드에서 주목해야 할 부분은 리스트의 표현식(List Comprehesions)이다.

prices = [ (b+s-50) for b in burger for s in soda]

해설의 1 부분을 해결하기 위해서는 C 소스코드에서와 같이 다중 for문을 사용할 수 있으나 파이썬 코드에서는 리스트 표현식을 사용한 것이다. 표현식 안에서 다중 for문을 기술하여 버거과 소다의 세트 조합을 만들고 그 가격들을 원소로 하는 리스트 prices를 생성한 것이다. 세트 가격의 리스트 prices가 있기에 내장함수 min()을 이용하여 prices에서 가장 낮은 값를 출력하도록 하였다.


댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함
05-18 17:43