μƒˆμ†Œμ‹

μ•Œκ³ λ¦¬μ¦˜/BaekJoon

[C++] BOJ 2480번: μ£Όμ‚¬μœ„ μ„Έκ°œ

  • -
728x90

문제

1μ—μ„œλΆ€ν„° 6κΉŒμ§€μ˜ λˆˆμ„ 가진 3개의 μ£Όμ‚¬μœ„λ₯Ό λ˜μ Έμ„œ λ‹€μŒκ³Ό 같은 κ·œμΉ™μ— 따라 μƒκΈˆμ„ λ°›λŠ” κ²Œμž„μ΄ μžˆλ‹€.

  1. 같은 눈이 3κ°œκ°€ λ‚˜μ˜€λ©΄ 10,000원+(같은 눈)×1,000μ›μ˜ μƒκΈˆμ„ λ°›κ²Œ λœλ‹€. 
  2. 같은 눈이 2개만 λ‚˜μ˜€λŠ” κ²½μš°μ—λŠ” 1,000원+(같은 눈)×100μ›μ˜ μƒκΈˆμ„ λ°›κ²Œ λœλ‹€. 
  3. λͺ¨λ‘ λ‹€λ₯Έ 눈이 λ‚˜μ˜€λŠ” κ²½μš°μ—λŠ” (κ·Έ 쀑 κ°€μž₯ 큰 눈)×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개 μ£Όμ‚¬μœ„μ˜ λ‚˜μ˜¨ 눈이 μ£Όμ–΄μ§ˆ λ•Œ, μƒκΈˆμ„ κ³„μ‚°ν•˜λŠ” ν”„λ‘œκ·Έλž¨μ„ μž‘μ„± ν•˜μ‹œμ˜€.

 

 

μž…λ ₯ 1

3 3 6

좜λ ₯ 2

1300

 

μž…λ ₯ 2

2 2 2

좜λ ₯ 2

12000

 

μž…λ ₯ 3

6 2 5

좜λ ₯ 3

600

 

 

μ½”λ“œ

#include<iostream>

using namespace std;

bool equals(int rValue,int lValue, int* outValue) {
    if (rValue == lValue) {
        *outValue = rValue;
        return true;
    }
    else
        return false;
}

int main() {
    
    int firstDice, secondDice, thirdDice;
    int value=0;
    cin >> firstDice >> secondDice >> thirdDice;
    
    if (firstDice == secondDice&& secondDice == thirdDice) {     //λ§Œμ•½ μ„Έκ°œκ°€ 같은 값이면
        cout << 10000 + firstDice * 1000;
    }
    else if (equals(firstDice,secondDice,&value)
        || equals(secondDice, thirdDice, &value)
        || equals(firstDice, thirdDice, &value)) {     //λ§Œμ•½ λ‘κ°œκ°€ 같은 값이면
        cout<<1000+ value *100;
    }
    else {
        //κ·Έ 쀑 κ°€μž₯ 큰눈
        value = max(max(firstDice, secondDice), thirdDice);
        cout << value * 100;
    }

    return 0;
}

 

*κ°„λ‹¨ν•œ ν•΄μ„€*

λ‹¨κ³„λ³„λ‘œ ν’€μ–΄λ³΄κΈ°μ—μ„œ ifλ¬Έ 주제둜 μΆ”κ°€ λΆ„λ₯˜λœ λ¬Έμ œμ—¬μ„œ ν’€μ–΄λ³΄μ•˜λ‹€.

λ§κ·ΈλŒ€λ‘œ κ°„λ‹¨ν•˜κ²Œ if-else if-else문을 ν†΅ν•˜μ—¬ 총 3κ°€μ§€λ‘œ λΆ„λ₯˜ν•˜λ©΄ λœλ‹€.

 if (firstDice == secondDice&& secondDice == thirdDice)

이뢀뢄은 첫번째 μ£Όμ‚¬μœ„μ™€ λ‘λ²ˆμ§Έ μ£Όμ‚¬μœ„μ˜ μˆ«μžκ°€ κ°™κ³  λ‘λ²ˆμ§Έ μ£Όμ‚¬μœ„μ™€ μ„Έλ²ˆμ§Έ μ£Όμ‚¬μœ„μ˜ μˆ«μžκ°€ κ°™μ„λ•Œ, 'A와 Bκ°€ κ°™κ³  B와 Cκ°€ κ°™μœΌλ©΄ A와 CλŠ” κ°™λ‹€'λΌλŠ” 곡리λ₯Ό 톡해 λ‘κ°€μ§€μ˜ 원리가 true값을 λ°˜ν™˜ν•œλ‹€λ©΄ μžμ—°μŠ€λŸ½κ²Œ μ„Έ κ°€μ§€μ˜ 값이 λͺ¨λ‘ κ°™μŒμ„ μ˜λ―Έν•œλ‹€.

bool equals(int rValue,int lValue, int* outValue) {
    if (rValue == lValue) {
        *outValue = rValue;
        return true;
    }
    else
        return false;
}

equals()ν•¨μˆ˜μ˜ 경우 else ifλ¬Έ μ•ˆμ—μ„œ λ§Œμ•½ λ‘κ°œκ°€ 같은 값이면 value에 κ·Έ 값을 μ§‘μ–΄λ„£μ–΄μ„œ 좜λ ₯ν• λ•Œ μ“Έμˆ˜ μžˆκ²Œλ” μ œμž‘ν•˜μ˜€λ‹€. 그쀑 outValue만 포인터λ₯Ό μ‚¬μš©ν•œ μ΄μœ λŠ” rValue와 lValue의 경우 얕은 볡사λ₯Ό 톡해 μˆ«μžκ°’λ§Œ λ“€κ³ μ™€μ„œ λΉ„κ΅ν•˜λ©΄ λ˜μ§€λ§Œ outValue의 경우 ν•΄λ‹Ή 값을 λ„£μ–΄μ€˜μ•Όν•˜κΈ°λ•Œλ¬Έμ— κΉŠμ€ 볡사가 ν•„μš”ν•΄μ„œ 포인터λ₯Ό μ‚¬μš©ν•˜μ˜€λ‹€.

else {
        //κ·Έ 쀑 κ°€μž₯ 큰눈
        value = max(max(firstDice, secondDice), thirdDice);
        cout << value * 100;
    }

λ§ˆμ§€λ§‰μœΌλ‘œ μ„Έκ°œμ˜ 값이 λͺ¨λ‘ λ‹€λ₯Έ 경우 max()ν•¨μˆ˜λ₯Ό 톡해 λ¨Όμ € 첫번째 μˆ˜μ™€ λ‘λ²ˆμ§Έ 수의 크기λ₯Ό λΉ„κ΅ν•˜κ³ , κ·Έ λ‹€μŒ λΉ„κ΅ν•œ 큰 κ°’κ³Ό μ„Έλ²ˆμ§Έ 수의 값을 λΉ„κ΅ν•˜μ—¬ 제일 큰 수λ₯Ό value에 λ„£μ–΄μ„œ 좜λ ₯ν•˜λ„λ‘ ν•˜μ˜€λ‹€.

 

 

 

*이 λ°©λ²•λ§Œμ΄ λ§žλŠ” 정닡은 μ•„λ‹™λ‹ˆλ‹€.

훨씬 μ’‹κ³  λΉ λ₯Έ λ‹€λ₯Έ μ•Œκ³ λ¦¬μ¦˜μ„ κ΅¬ν˜„ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

μ•Œκ³ λ¦¬μ¦˜ κ³΅λΆ€ν•˜μ‹œλŠ” λΆ„λ“€ ν™”μ΄νŒ…! '0'/*

λ°˜μ‘ν˜•
Contents

ν¬μŠ€νŒ… μ£Όμ†Œλ₯Ό λ³΅μ‚¬ν–ˆμŠ΅λ‹ˆλ‹€

이 글이 도움이 λ˜μ—ˆλ‹€λ©΄ 곡감 λΆ€νƒλ“œλ¦½λ‹ˆλ‹€.