대외교육/코딩테스트

[프로그래머스][코딩기초트레이닝][C++] 주사위 게임3

흑요석s 2023. 10. 3. 15:29

※ 핵심 아이디어 : 주사위의 굴릴때의 결과값을 1~6까지의 배열 내에서 카운팅 한다. 그후 카운팅 횟수 비교 처리

 

#include <string>
#include <vector>
#include <algorithm> 

using namespace std;

int solution(int a, int b, int c, int d) {
    if(a==b && b==c && c==d) return 1111*a;
    
    int dice[7] = {0};
    int p = 0;
    //주사위 굴림.
    dice[a]++;
    dice[b]++;
    dice[c]++;
    dice[d]++;
    
    
    // 세 주사위 숫자가 같은 경우
    for (int i = 1; i<=6; i++){ 
        if (dice[i]==3){          //세주사위가 같은 p를 찾았으면
            for (int j =1; j<=6; j++){  //q를 찾아야함.
                if(dice[j] == 1 && j!=i ){
                    return (10*i +j)*(10*i +j);
                }  // i와 j는 주사위 눈금 값을 의미한다.
                
            }
        }
    }
    
    //주사위 두개씩 같은 값이 나오는 경우
    for (int i = 1; i<=6; i++){
        if (dice[i]==2){
            for (int j = 1; j <=6; j++ ){
                if (dice[j] == 2 && j!=i){
                    return  (i+j) * abs(i-j);
                }
            }
        }
    }
    
    //주사위 두개는 같고 하나 하나는 다른 경우
    for (int i = 1; i <= 6; i++) {
        if (dice[i] == 2) {
            int q = 0, r = 0;
            for (int j = 1; j <= 6; j++) {
                if (dice[j] == 1 && j != i) {
                    if (q == 0) {
                        q = j;
                    } else {
                        r = j;
                        break;
                    }
                }
            }
            return q * r;
        }
    }
    
    
    //위의 조건이 아니라면 네 주사위에 적힌 숫자가 모두 다르다는 것.
    return min({a,b,c,d});
}