프로그래밍/코딩 테스트 연습

[백준] 2480번 : 주사위 세개 (2단계) (C++)

w_w 2024. 1. 8. 10:41
 

2480번: 주사위 세개

1에서부터 6까지의 눈을 가진 3개의 주사위를 던져서 다음과 같은 규칙에 따라 상금을 받는 게임이 있다. 같은 눈이 3개가 나오면 10,000원+(같은 눈)×1,000원의 상금을 받게 된다. 같은 눈이 2개만

www.acmicpc.net

 


 

문제

 

 

 

 

 

해석

 

문제에서 조건의 기준을 "눈이 몇 개 같냐"를 주었고, 주사위 개수를 입력받는 다면 생각할게 많지만 3개로 고정되었기 때문에 단순히 문제가 풀라는 대로 조건을 세우고 연산하면 되는 문제입니다.

 

 

 

 

 

 

풀이

 

같은 눈이 몇 개인지에 따라 출력이 달라지는 if 문을 세우는 방식도 다양하겠지만 저는 같은 눈이 두 개 이상인 경우와 같은 눈이 없는 경우를 우선으로 해 문제를 풀겠습니다.

 

if (a == b || b == c || c == a) {
        if (a == b && b == c)
            cout << 10000 + a * 1000;
        else if (a == b)
            cout << 1000 + a * 100;
        else if (b == c)
            cout << 1000 + b * 100;
        else if (a == c)
            cout << 1000 + a * 100;
    }
     else
       cout << ...

 

같은 눈이 두 개이상인 경우, 눈이 전부 같을 때와 두 개만 같을 때 출력을 달리 한 if 문입니다.

 

눈이 전부 다른 수일 때 최댓값을 뽑기 위해서 간단한 함수코드를 작성했습니다.

 

int max_number(int a, int b, int c) {
    if (a > b && a > c)
        return a;
    else if(b > a && b > c)
        return b;
    else
        return c;

}

 

즉 마지막 else의 코드블록은 cout << max_number(a, b, c) * 100; 하면 문제의 모든 경우를 고려했습니다.

 

함수를 사용하지 않고, 이항 연산자를 중복해서 사용하면 간단히 세수의 최댓값을 출력할 수 있습니다.

 

(a > b) ? (a > c) ? a : c : (b > c) ? b : c

 

결과는 다음과 같습니다.

 

#include<iostream>
using namespace std;

int max_number(int a, int b, int c) {
    if (a > b && a > c)
        return a;
    else if(b > a && b > c)
        return b;
    else
        return c;

}

int main() {
    int a, b, c;
    cin >> a >> b >> c;
    if (a == b || b == c || c == a) {
        if (a == b && b == c)
            cout << 10000 + a * 1000;
        else if (a == b)
            cout << 1000 + a * 100;
        else if (b == c)
            cout << 1000 + b * 100;
        else if (a == c)
            cout << 1000 + a * 100;
    }
     else
            cout << max_number(a, b, c) * 100;

}

 

 

 

 


 

 

 

정리

 

문제에 주어진 조건을 코드로 작성하는 연습을 도와주는 문제입니다.

 

또한 원하는 기능을 수행해 주는 함수를 직접 만들어 사용하거나 이항 연산자를 통해 세 수의 최대 값을 출력할 수 있습니다.