본문 바로가기

algorithm/프로그래머스

프로그래머스_숫자 야구(C++)

 

 

https://programmers.co.kr/learn/courses/30/lessons/42841

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

[문제 풀이]

완전탐색을 이용하여 문제를 풀었습니다.

 

1~9로 나올 수 있는 세 자리 수 조합 123 ~ 987을 입력으로 들어오는 baseball 벡터의 크기만큼 반복을 하며 추정값을 찾았습니다. 123 ~ 987수를 확인할 때 0이 들어가거나 같은 수가 반복되면 continue 하였고 벡터만큼 반복을 할 때에는 확인하고자 하는 값이 주어진 입력의 스트라이크와 볼 값과 모두 같은지 확인한 후 같으면 값을 증가시켜 주었습니다.

[코드]

#include <string>
#include <vector>
using namespace std;

int solution(vector<vector<int>> baseball) {
    int answer = 0;
    int strike, ball;

    string s1 = "";
    string s2 = "";

    for (int idx = 123; idx <= 987; idx++) {
        
        bool check = true;

        s1 = to_string(idx);

        if (s1[0] == '0' || s1[1] == '0' || s1[2] == '0')
            continue;

        if (s1[0] == s1[1] || s1[0] == s1[2] || s1[1] == s1[2])
            continue;


        for (int jdx = 0; jdx < baseball.size(); jdx++) {

            strike = 0, ball = 0;

            s2 = to_string(baseball[jdx][0]);

            for (int i = 0; i < 3; i++) {
                for (int j = 0; j < 3; j++) {

                    if (i == j && s1[i] == s2[j]) {
                        strike++;
                        continue;
                    }
                    if (i != j && s1[i] == s2[j]) {
                        ball++;
                        continue;
                    }
                }
            }

            if (strike != baseball[jdx][1] || ball != baseball[jdx][2]) {
                check = false;
                break;
            }

        }

        if (check)
            answer++;

    }

    return answer;
}