[백준] 2480, 주사위 3개, <algorithm>, max(a,b)

YUN·2025년 9월 15일

C++

목록 보기
13/79

1. <iostream>

#include <iostream>

using namespace std;

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

(1) 세 주사위 값이 같은지 확인하기

세 주사위를 던지는 경우,

(1) 3개 전부 같다
(2) 2개가 같다
(3) 0개가 같다 (=전부 다르다)

이 3가지의 경우가 존재하니, 이를 기준으로 조건문을 사용해 분기 처리하면된다.

(2) 세 주사위 값 중 최댓값 찾기 - 방법1

위의 문제의 경우 2가지가 고민이다.

(1) 어떻게 같은지를 찾을거냐?
(2) 어떻게 최댓값을 찾을거냐?

(1),(2) 모두 조건문 적절히 사용하면 가능하다.

그러나 (2)의 경우 <algorithm> 헤더의 max(a,b) 함수를 쓰면 최댓값을 쉽게 찾을 수 있다.

이때 중요한 것은 max(a,b)는 인자가 2개이다.

따라서 3개의 수 중 가장 큰 값을 찾으려면 max(a,max(b,c))와 같은식으로

max(a,b)의 인자로 max(a,b)를 넣어줘야한다.

(3) 세 주사위 값 중 최댓값 찾기 - 방법2

처음에 전부 다른 경우 최댓값을 어떻게 찾아야할지가 고민이었다.

	max=a;
    if(b>max) max=b;
    if(c>max) max=c;
    cout << max*100;

위처럼 a,b,c 각각을 전부 max 값과 비교하여 max값보다 큰 녀석이있다면 max에 해당 값을 대입해주고,,하는식으로하면 최댓값을 얻을 수 있다는것이 인상적이었다.

위의 코드는 다른데도 많이 사용할 수 있을 것 같다.

2. <iostream> + 빠른 입출력

#include <iostream>

using namespace std;

int main() {
    int a,b,c;
    int max;
    ios_base::sync_with_stdio(false);
    cin >> a >> b >> c;
    
    if(a == b && b == c) cout << 10000+a*1000;
    else if (a == b || b == c) cout << 1000 + b*100;
    else if (a == c) cout << 1000+a*100;
    else {
        max=a;
        if(b>max) max=b;
        if(c>max) max=c;
        cout << max*100;
        
    }
    return 0;
}

그냥 기본 <iostream> 코드에다가 ios_base::sync_with_stdio(false);

한 줄 추가해주면된다.

3. <stdio.h>

#include <stdio.h>

int main() {
    int a, b, c, max;
    scanf("%d %d %d", &a, &b, &c);
    
    if(a==b&&a==c) printf("%d", 10000+1000*a);
    else if(a==b||b==c) printf("%d", 1000+b*100);
    else if(a==c) printf("%d", 1000+a*100);
    else {
        max = a;
        if(b>max) max=b;
        if(c>max) max=c;
        printf("%d", max*100);
    }

오답노트

(1) printf 쓸 때 문자열 말고는 전부 형식지정자 사용해주기

printf(10000+1000*a) 와 같은 식으로 사용했더니 오류가났다.

printf() 사용시 printf("hihello") 이런식으로 문자열을 인자로 넣는 경우 아니라면, 전부 무조건 형식지정자를 사용해줘야한다.

printf("%d", 10000+1000*a) 이런식으로 !

(2) 조건문은 거름망이다.

사실 처음에 분기하려하니 너무 노가다일것같아서 오름차순으로 정렬을 진행한 다음에 분기하려했다.

그렇게 삽질하다가 잘 안돼서 gpt한테 물어봤더니 위처럼 간단하게 잘 코드를 짜주었다.

if, else if, else 구문을 사용할 때, if,else if,else 문을 각각 거름망처럼 생각하면 좋을 것 같다.

예를들어

if(a == b && b == c) cout << 10000+a*1000; 밑에서는 더이상 a와 b와 c가 모두 같은 상황을 고려할 필요가없다. 위에서 거름망으로 거르기때문에 절대 위와같은 상황은 아래에서 발생하지않는다.

else if (a == b || b == c) cout << 1000 + b*100; 밑에서는 더이상 a와 b가 같거나 b와 c가 같은 상황을 고려할 필요가없다. 위에서 거름망으로 거르기때문에 절대 위와같은 상황은 아래에서 발생하지않는다.

else if (a == c) cout << 1000+a*100; 밑에서는 더이상 a와 c가 같은 상황을 고려할 필요가없다. 위에서 거름망으로 거르기때문에 절대 위와같은 상황은 아래에서 발생하지않는다.

그러면 이제 남은건 전부 다른 상황 밖에없으니 그에 맞는 처리를 해주면된다.

(3) <algorithm> 헤더의 max(a,b) 함수를 잘 활용하자

세 주사위 값이 같은지,다른지는 if문을 사용하면 쉽게 분기가 가능하다.

그러나 최댓값의 경우 어떻게 구해야할지 잘 떠오르지 않았다.

머릿속에 떠오른 방법은

(1) 문자열로 받아서 정렬 함수 사용
(2) 최댓값 찾는 함수 사용

였는데, 둘다 어떤 헤더의 어떤 함수를 써야될지 떠오르지않았다.

// (1) 방법
#include <iostream>
#include <algorithm>
#include <string>

using namespace std;

int main() {
    ios_base::sync_with_stdio(false);
    string a, b, c;
    cin >> a >> b >> c; // 3 3 6
    a = a + b + c; // "336"
    sort(a.begin(), a.end());
    if(a[0]==a[1] && a[1]==a[2]) cout << 10000+(a[0]-'0')*1000;
    else if(a[0] == a[1] && a[1] != a[2]) cout << 1000 +(a[0]-'0')*100;
    else if(a[0] == a[2] && a[1] != a[0]) cout << 1000 + (a[0]-'0')*100;
    else if(a[1] == a[2] && a[0] != a[1]) cout << 1000 + (a[1]-'0')*100;
    else cout << (a[2]-'0') * 100;
    return 0;

}

// (2) 방법
#include <iostream>
#include <algorithm>

using namespace std;
int main() {
    ios_base::sync_with_stdio(false);
    
    int a, b, c;
    cin >> a >> b >> c;
    
    if (a == b && b == c) cout << 10000 + a * 1000;
    else if (a == b || a == c) cout << 1000 + a * 100;
    else if (b == c) cout << 1000 + b * 100;
    else cout << max(a, max(b,c)) * 100;
    
    
    return 0;
}

<algorithm> 헤더의 사용법 미숙지로 인해 틀린것으로 생각된다.

<algorithm> 헤더의 주요 함수들을 잘 외워둬야겠다.

profile
안녕하세요. 전자공학부 학부생의 공부 기록입니다.

0개의 댓글