백준 - 2480번 주사위 세 개(조건 분기, feat. 삼항 연산자 줄기)

Kiwoong Park·2023년 5월 3일
0

문제

1에서부터 6까지의 눈을 가진 3개의 주사위를 던져서 다음과 같은 규칙에 따라 상금을 받는 게임이 있다.

같은 눈이 3개가 나오면 10,000원+(같은 눈)×1,000원의 상금을 받게 된다.
같은 눈이 2개만 나오는 경우에는 1,000원+(같은 눈)×100원의 상금을 받게 된다.
모두 다른 눈이 나오는 경우에는 (그 중 가장 큰 눈)×100원의 상금을 받게 된다.
예를 들어, 3개의 눈 3, 3, 6이 주어지면 상금은 1,000+3×100으로 계산되어 1,300원을 받게 된다. 또 3개의 눈이 2, 2, 2로 주어지면 10,000+2×1,000 으로 계산되어 12,000원을 받게 된다. 3개의 눈이 6, 2, 5로 주어지면 그중 가장 큰 값이 6이므로 6×100으로 계산되어 600원을 상금으로 받게 된다.

3개 주사위의 나온 눈이 주어질 때, 상금을 계산하는 프로그램을 작성 하시오.

C++ 풀이

무지성으로 문제에 주어지는 대로 조건 분기를 타고 3항 연산자를 활용해 최대값을 구하여 풀면 된다.

#include <iostream>
using namespace std;
int main(){
    int a,b,c,tot,mx;
    cin >> a >> b >> c;
    if (a==b && b==c)
        tot=10000+a*1000;
    else if (a==b)
        tot=1000+a*100;
    else if (b==c)
        tot=1000+b*100;
    else if (a==c)
        tot=1000+c*100;
    else{
        tot = ((a>b?a:b)>c?(a>b?a:b):c)*100;
    }
    
    cout << tot;
        
}

C++ 숏코딩 분석하기

#include<iostream>
int main(){int a,b,c;std::cin>>a>>b>>c;std::cout<<(a==b&&b==c?100+a*10:a==b||a==c?10+a:b==c?10+b:a>b&&a>c?a:b>a&&b>c?b:c)*100;} 

가독성 있는 버전 변환

#include<iostream>
int main(){
int a,b,c;
std::cin >> a >> b >> c;
std::cout << (a==b&&b==c?100+a*10:a==b||a==c?10+a:b==c?10+b:a>b&&a>c?a:b>a&&b>c?b:c)*100;
// 보시다 싶이 3항 연산자(ternary operator)를 
// 고구마 줄기 엮듯 엮어버린 경지..
} 

아래의 코드를 통해 3항 연산자 줄기를 찢어보자

std::cout << (
    a == b && b == c ? 100 + a * 10 : // if a == b == c, add 100 + a*10 to output
    a == b || a == c ? 10 + a :      // if a equals b or c, add 10 + a to output
    b == c ? 10 + b :                // if b equals c, add 10 + b to output
    a > b && a > c ? a :             // if a is the largest, add a to output
    b > a && b > c ? b :             // if b is the largest, add b to output
    c                       // otherwise, add c to output
) * 100;
profile
You matter, never give up

0개의 댓글