[Programmers/C++] 주사위 게임 3

2024. 7. 23. 19:50·🐸 Problem Solving/Programmers

 

문제

1부터 6까지 숫자가 적힌 주사위가 네 개 있습니다. 네 주사위를 굴렸을 때 나온 숫자에 따라 다음과 같은 점수를 얻습니다.

 

  • 네 주사위에서 나온 숫자가 모두 p로 같다면 1111 × p점을 얻습니다.
  • 세 주사위에서 나온 숫자가 p로 같고 나머지 다른 주사위에서 나온 숫자가 q(p ≠ q)라면 (10 × p + q)2 점을 얻습니다.
  • 주사위가 두 개씩 같은 값이 나오고, 나온 숫자를 각각 p, q(p ≠ q)라고 한다면 (p + q) × |p - q|점을 얻습니다.
  • 어느 두 주사위에서 나온 숫자가 p로 같고 나머지 두 주사위에서 나온 숫자가 각각 p와 다른 q, r(q ≠ r)이라면 q × r점을 얻습니다.
  • 네 주사위에 적힌 숫자가 모두 다르다면 나온 숫자 중 가장 작은 숫자 만큼의 점수를 얻습니다.

 

네 주사위를 굴렸을 때 나온 숫자가 정수 매개변수 a, b, c, d로 주어질 때, 얻는 점수를 return 하는 solution 함수를 작성해 주세요.

 

제한 사항

 

 

 

 

 

입출력 예시

입출력 예시

 

입출력 예시

 

 

 


 

풀이 

#include <vector>
#include <set>
#include <map>
#include <math.h>
using namespace std;

int solution(int a, int b, int c, int d) {
    
    set<int> nums{a, b, c, d};
    map<int, int> count;
    
    count[a]++;
    count[b]++;
    count[c]++;
    count[d]++;
    
    switch(nums.size()){
        
        //. 네 주사위에서 나온 숫자가 모두 같을 때 (p p p p)
        case 1: 
            return 1111 * a;
            
        case 2: 
            //. 주사위가 두 개씩 같은 값일때 (p p q q)
            if (count[a] == 2 || count[b] == 2 || count[c] == 2 || count[d] == 2){
                auto it = nums.begin();
                int p = *it;
                advance(it, 1);
                int q = *it;
                
                return (p + q) * abs(p - q);
            }
            
            //. 세 주사위에서 나온 숫자가 같고 나머지 주사위 숫자만 다를 때 (p p p q)
            else {
                int p, q;
                for (const auto& c : count){
                    if (c.second == 3)
                        p = c.first;
                    else
                        q = c.first;
                }
                    
                return pow(10 * p + q, 2);
            }
            
        //. 두 수만 같고 나머지는 다를 때 (x x y z)
        case 3: {
            vector<int> v;
            for (const auto& c : count){
                if (c.second != 2) 
                    v.push_back(c.first);
            }
            return v[0] * v[1];
        }
        
        case 4:
            auto it = nums.begin();
            return *it;
    }
}

 

 

 


저작자표시 비영리 변경금지 (새창열림)

'🐸 Problem Solving > Programmers' 카테고리의 다른 글

[Programmers/C++] 수박수박수박수박수박수?  (0) 2024.07.24
[Programmers/C++] 주사위 게임 2  (0) 2024.07.23
[Programmers/C++] 주사위 게임 1  (0) 2024.07.23
'🐸 Problem Solving/Programmers' 카테고리의 다른 글
  • [Programmers/C++] 수 조작하기 1
  • [Programmers/C++] 수박수박수박수박수박수?
  • [Programmers/C++] 주사위 게임 2
  • [Programmers/C++] 주사위 게임 1
Mojing_
Mojing_
매일 매일 경험치를 쌓는 모징이의 개발 블로그입니다 :) This is Mojing’s Dev Blog where she gain experience points every day. :)
  • Mojing_
    모징이의 개발 경험치
    Mojing_
  • 전체
    오늘
    어제
    • 분류 전체보기 (143)
      • 👻 Unity (5)
        • 🔧 기능 구현 (0)
        • 💡 유니티 팁 (0)
        • 📘 Unity 노트 (2)
      • 💻 Programming (14)
        • C (3)
        • C++ (9)
        • C# (0)
        • Swift (2)
      • 💾 Computer Science (16)
        • Algorithm (9)
        • Software Engineering (7)
      • 🐸 Problem Solving (108)
        • Programmers (41)
        • BOJ (67)
      • 🔋 ETC (0)
      • 💡 Quest Log (0)
  • 인기 글

  • 공지사항

  • 태그

    탐색
    오블완
    티스토리챌린지
    BOJ
    프로그래머스
    CS
    backtracking
    dynamic programming
    sort
    C++
    algorithm
    programmers
    Problem Solving
    DFS/BFS
    Unity
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
Mojing_
[Programmers/C++] 주사위 게임 3
상단으로

티스토리툴바