기록공간

숫자 야구 (프로그래머스) 본문

Algorithm/문제

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

입코딩 2020. 6. 9. 16:38
반응형

우선 두 가지 조건이 존재한다는 것을 간접적으로 알려주고 있다.

  1. 답은 0이 포함되지 않는다. (1~9까지 숫자)

  2. 답은 서로 중복되는 숫자를 가질 수 없다. (서로 다른 임의의 숫자)

 

해결 방법은 다음과 같다.

  1. 입력되는 값은 서로 다른 숫자이므로 이를 만족하는 최솟값 123부터 최댓값 987까지 숫자를 문자열 n으로 바꾼다.

    (n 문자열은 야구 게임의 정답 후보이다)

  2. 만약 n 문자열에 0이 포함되어 있거나 서로 중복되는 경우 위 조건을 만족하지 않은 정답 후보이므로 다음 값으로 넘어간다.

  3. 질문을 검사하며 n과 대조해본다. 만약 서로 같은 위치에 같은 문자열이 있다면 스트라이크 값을 증가시킨다. 위치는 다르지만 같은 문자열이 존재하는 경우 볼 값을 증가 시킨다.

  4. 3의 작업을 모두 마치고 질문에서 주어진 스트라이크 값과 볼 값이 같다면 n은 질문 값을 만족한다. 만약 같지 않다면 n은 질문값을 만족하지 않으므로 다음 정답 후보로 넘어간다.

  5. 모든 질문에 대해서 4의 작업을 만족한다면 n은 올바른 정답 후보로 카운트 롤 하나 증가시킨다. 

 

코드는 다음과 같다.

#include <string>
#include <vector>

using namespace std;

int solution(vector<vector<int>> baseball) 
{
    int answer = 0;
    
    // 모든 정답 후보를 검사한다.
    for(int i = 123; i <= 987; ++i)
    {
        // 문자열로 변경한다.
        string num = to_string(i);
        // 조건을 만족하지 않는 정답 후보는 검사하지 않는다.
        if(num[0] == num[1] || num[1] == num[2] || num[2] == num[0]) continue;
        if(num[0] == '0' || num[1] == '0' || num[2] == '0') continue;
        
        bool check = true;
        // 모든 질문들을 검사한다.
        for(auto info : baseball)
        {
            string cmpNum = to_string(info[0]);
            int strike = 0, ball = 0;
            // 모든 문자를 비교하며
            for(int j = 0; j < 3; ++j) 
            {
                // 스트라이크, 볼 값을 기록한다.
                if(cmpNum[j] == num[j]) ++strike;
                if(cmpNum[j] == num[(j + 1) % 3] || cmpNum[j] == num[(j + 2) % 3]) ++ball;
            }
            
            // 질문의 정보와 다르다면 정답 후보를 만족하지 않으므로
            // 다음 정답 후보로 넘어간다.
            if(strike != info[1] || ball != info[2])
            {
                check = false;
                break;
            }
        }
        // 만약 모든 질문의 조건을 만족한다면 정답 후보이므로 
        // 갯수를 증가시킨다.
        if(check) ++answer;
    }
    
    return answer;
}
반응형

'Algorithm > 문제' 카테고리의 다른 글

카펫 (프로그래머스)  (0) 2020.06.12
가장 큰 정사각형 찾기 (프로그래머스)  (0) 2020.06.10
프린터 (프로그래머스)  (0) 2020.06.05
주식가격 (프로그래머스)  (0) 2020.06.05
더 맵게 (프로그래머스)  (0) 2020.06.05
Comments