[PS 백준 - 2.6] 2503번: 숫자 야구

PongkiJoa·2021년 6월 30일
0

PS Diary - 백준

목록 보기
19/54
post-thumbnail

문제 정보

백준 2503번 - 바로가기

  • 난이도: 실버 5
  • 알고리즘: 브루트포스 알고리즘

코멘트

아이디어 자체는 그렇게 어렵진 않았다. 모든 숫자들마다 스트라이크, 볼 개수가 같지 않은 케이스를 제거하여 마지막에 남은 숫자의 개수를 출력하면 된다. 마치 아리스토텔레스의 체를 만드는 듯한 기분이 들었다.

string vec[900] <- vector<string> vec

처음에 접근할 때는 vector로 문제를 풀다가 계속 빌드가 안되서 왜 그런가 했더니 벡터의 iterator 접근이 문제가 있었다. 벡터의 값들이 반복문으로 돌아가는 와중에 erase를 해서 계속 에러가 났던 것이다. 그래서 임시로 다른 벡터를 만들고 해당 원소를 find한 후 그 iterator에 있는 값을 삭제하려고 했는데 또 에러가 계속 났다.

아무리 해도 해결이 안되길래 일반 배열로 바꿔서 하니까 너무 쉽게 풀렸다...


소스 코드

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

using namespace std;


int main() {
    ios::sync_with_stdio(false);
    cin.tie(0);
    cout.tie(0);

    string vec[900];
    int cou = 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 && j != k && k != i)
                    vec[cou++] = (to_string(i * 100 + j * 10 + k));
            }
        }
    }

    int n;
    cin >> n;

    for (int i = 0; i < n; i++) {
        string x;
        int s, b;
        cin >> x >> s >> b;
        
        
        for (int t = 0; t < cou; t++) {
            
            string y = vec[t];
            
            int sy = 0;
            int by = 0;

            // strike 좌표들 저장
            int arr[3] = { 1,1,1 };
            for (int j = 0; j < 3; j++) {
                if (x[j] == y[j]) {
                    sy++;
                    arr[j] = 0;
                }
            }

            for (int j = 0; j < 3; j++) {
                if (arr[j]) {
                    int num = x[j];
                    if (y[0] == num && j != 0) by++;
                    if (y[1] == num && j != 1) by++;
                    if (y[2] == num && j != 2) by++;
                }
            }

            if (sy != s || by != b)
                vec[t] = "000";
        }
      
    }

    int count = 0;

    for (int i = 0; i < cou; i++) {
        if (vec[i] != "000") count++;
    }

    cout << count;
}
profile
컴공 20학번

0개의 댓글

관련 채용 정보