[프로그래머스] 숫자야구

문제 링크 - https://programmers.co.kr/learn/courses/30/lessons/42841

완전탐색 활용. 다른 방법이 있을 것도 같은데 도저히 안 떠오르더라;;;

각자 서로 다른 1~9까지 3자리 임의의 숫자를 정한 뒤 서로에게 3자리의 숫자를 불러서 결과를 확인합니다. 그리고 그 결과를 토대로 상대가 정한 숫자를 예상한 뒤 맞힙니다.
* 숫자는 맞지만, 위치가 틀렸을 때는 볼
* 숫자와 위치가 모두 맞을 때는 스트라이크
* 숫자와 위치가 모두 틀렸을 때는 아웃
예를 들어, 아래의 경우가 있으면
A : 123
B : 1스트라이크 1볼.
A : 356
B : 1스트라이크 0볼.
A : 327
B : 2스트라이크 0볼.
A : 489
B : 0스트라이크 1볼.
이때 가능한 답은 324와 328 두 가지입니다.

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

bool comp(vector<int> v, string s) {
string t = to_string(v[0]);
int st = 0, ba = 0;
for(int i = 0;i<t.length();i++){
        if(t[i] == s[i]) st++;
        else if(s[(i+1)%3] == t[i] || s[(i+2)%3] == t[i]) ba++;
    }
if (st == v[1] && ba == v[2]) return true;
return false;
}

bool baseballcheck(vector<vector<int>> ba, string target) {
for (auto i : ba) {
if (!comp(i, target)) return false;
}
return true;
}

int solution(vector<vector<int>> baseball) {
int answer = 0;
for (int i = 1; i <= 9; i++) {
for (int j = 1; j <= 9; j++) {
for (int k = 1; k <= 9; k++) {
                if(i != j && i != k && j != k){
                    string tmp;
                    tmp += (i + 48); tmp += (j + 48); tmp += (k + 48);
                    if (baseballcheck(baseball, tmp)) {
                        answer++;
                    }
                }
}
}
}
return answer;
}

댓글

이 블로그의 인기 게시물

Unity - Dialogue 시스템을 구현할 때 유용한 무료 에셋

Unity - 메타 파일

Unity - 라이브러리 폴더