• toc {:toc}

문제 ν™•μΈν•˜κΈ°

풀이

  1. 숫자 μ•Όκ΅¬μ˜ μˆ«μžλ“€μ€ 1) 각 자리 μˆ˜κ°€ 겹치면 μ•ˆλ˜κ³  2) μ‹­μ˜ 자리, 일의 μžλ¦¬μ— 0이 λ“€μ–΄κ°€λ©΄ μ•ˆ λœλ‹€.
  2. λͺ¨λ“  쑰건을 λ§Œμ‘±ν•΄μ•Ό κ°€λŠ₯성이 μžˆλŠ” 닡에 속할 수 μžˆλ‹€.

쑰건(e.g. 1s 1b)에 λ§žλŠ”μ§€ 확인할 λ•Œ 같은 μžλ¦¬μ— 같은 μˆ«μžκ°€ 있으면 슀트라이크, 같은 μˆ«μžκ°€ μžˆμœΌλ‚˜ μžλ¦¬κ°€ λ‹€λ₯΄λ‹€λ©΄ 볼둜 νŒλ³„ν•œλ‹€.

123 - 1s - 1b 쑰건을 ν™•μΈν–ˆμ„ λ•Œ 325 숫자λ₯Ό νŒλ³„ν•œλ‹€κ³  ν•˜λ©΄ 1s 1b둜 ν•΄λ‹Ή 쑰건은 ν†΅κ³Όν•œλ‹€. ν•˜μ§€λ§Œ λ‹€λ₯Έ 356 μ‘°κ±΄μ—μ„œ 1s 1b이 λ˜μ–΄ μ œμ™Έλ˜κΈ° λ•Œλ¬Έμ— 전체 쑰건을 νŒλ³„ν•˜λ‹€λ³΄λ©΄ κ°€λŠ₯성이 μ—†λŠ” 닡은 κ±ΈλŸ¬μ§€κ³  κ°€λŠ₯성이 μžˆλŠ” λ‹΅λ§Œ λ‚˜μ˜¨λ‹€.

#include <bits/stdc++.h>
using namespace std;
 
string nums[105];
int strikes[105], balls[105], fail[1005] = {0,};
 
int main(){
    ios::sync_with_stdio(false);
    cin.tie(); cout.tie();
 
    int N, s, b, res = 0;
    char hunds, tens, ones;
    string question;
 
    cin >> N;
 
    for(int i=0; i<N; i++){
        cin >> question >> s >> b;
        nums[i] = question;
        strikes[i] = s;
        balls[i] = b;
    }
 
    for(int i = 123; i <= 987; i++){
        string temp = to_string(i);
        hunds = temp[0];
        tens = temp[1];
        ones = temp[2];
        
        if(hunds == tens || hunds == ones || tens == ones) continue;
        if(tens == '0' || ones == '0') continue;
 
        for(int j = 0; j < N; j++){
            s = 0;
            b = 0;
            question = nums[j];
            for(int k=0; k < 3; k++){
                for(int l = 0; l < 3; l++){
                    if(temp[k] == question[l]){
                        if(k == l) s++;
                        else b++;
                    }
                }
            }
            if(s != strikes[j] || b != balls[j])
                fail[i] = 1;
        }
    }
 
    for(int i = 123; i <= 987; i++){
        string temp = to_string(i);
        hunds = temp[0];
        tens = temp[1];
        ones = temp[2];
        if(hunds == tens || hunds == ones || tens == ones) continue;
        if(tens == '0' || ones == '0') continue;
 
        if (fail[i] == 0) res++;
    }
 
    cout << res << '\n';
 
    return 0;
}