https://www.acmicpc.net/problem/2503
2503번: 숫자 야구
첫째 줄에는 민혁이가 영수에게 몇 번이나 질문을 했는지를 나타내는 1 이상 100 이하의 자연수 N이 주어진다. 이어지는 N개의 줄에는 각 줄마다 민혁이가 질문한 세 자리 수와 영수가 답한 스트
www.acmicpc.net
역시,, 완전 탐색이나 구현, 시뮬레이션은 코드가 길어진다..
어떻게 하면 좋을지 열심히 머리 굴리다가 다른 사람 코드를 보게 되었다.
아쉽게도 혼자선 풀지 못했지만 어떤 식으로 문제를 풀면 좋을지 생각할 수 있게 되었다. 다음에는 꼭 혼자 풀어봐야지..
일단, 완전탐색은 쉬우면서도 헷갈리는데 가장 중요한 것은
"머릿속에서 생략된 계산을 표현할 수 있어야 한다"는 것이다.
쉽진 않겠지만 최대한 풀어서 문제를 풀어보도록 노력해야겠다.
세 자리 수만 나올 수 있으므로 100부터 999까지 가능한데, 여기서 1~9까지 서로 다른 숫자 3개로 구성된다고 했으니
1. arr에 가능한 숫자 정보 넣기 (t/f)
0이 포함되면 안 되고, 서로 다른 숫자여야 한다. 그러므로 일단 arr 배열에 가능한 숫자는 true, 불가능한 숫자는 false로 구분해준다.
2. 민혁이 추측한 수와 arr [i]=true인 수 비교하기
여러 자리 수의 각 숫자들을 확인하려면 정수보단 문자열이 편하다. 이럴 땐 문자열로 바꿔서 for문으로 쭉 돌도록 하자. (to_string(n))
n개의 민혁이가 추측한 수를 입력받으면서 민혁이가 추측한 수(num), 스트라이크 개수(s), 볼 개수(b)를 입력받고
for문으로 123~999 중 가능한 숫자 인덱스 arr 배열을 쭉 돌면서 추측 수와의 스트라이크 개수와 볼 개수를 카운팅 한다.
for문이 끝나면 strike, ball 개수를 비교하고 다르다면 arr 배열을 false로 바꾼다.
n개의 추측 수를 모두 확인했다면 for문을 끝내고 나와 arr [i]=true인 인덱스를 찾아서 카운팅 해준다.
#include <iostream>
#include <algorithm>
#include <string>
using namespace std;
int main(){
ios::sync_with_stdio(0); cin.tie(0); cout.tie(0);
bool arr[1000];
int n, num, strike=0, ball=0, s, b;
for(int i=123; i<999; i++) arr[i] = true;
//arr에 가능한 숫자 정보 (서로다른수로 이루어진 3자리 수, 1~9 이므로 0 안됨)
for(int i=123; i<999; i++){
string s = to_string(i);
if(s[0] == s[1] || s[1] == s[2] || s[2] == s[0] || s[0] == '0' || s[1] == '0' || s[2] == '0')
arr[i] = false;
}
//입력받기
cin >> n;
for(int i=0; i<n; i++){
cin >> num >> s >> b;
string mh = to_string(num); //민혁이 추측한 수
for(int j=123; j<999; j++){
strike = 0;
ball = 0; //초기화
if(arr[j]){
string tmp = to_string(j);
for(int x=0; x<3; x++){
for(int y=0; y<3; y++){
//strike
if(x==y && mh[x] == tmp[y]) strike++;
if(x!=y && mh[x] == tmp[y]) ball++;
}
}
if(strike != s || ball != b) arr[j] = false;
}
}
}
int ans = 0;
for(int i=123; i<999; i++) if(arr[i]) ans++;
cout << ans << '\n';
return 0;
}
'알고리즘 > 백준' 카테고리의 다른 글
[백준/c++] 9093번: 단어 뒤집기 (0) | 2022.07.16 |
---|---|
[백준/c++] 5568번: 카드 놓기 (0) | 2022.07.14 |
[백준/c++] 18511번: 큰 수 구성하기 (0) | 2022.07.14 |
[백준/c++] 1969번: DNA (0) | 2022.07.14 |
[백준/c++] 2422번: 한윤정이 이탈리아에 가서 아이스크림을 사먹는데 (0) | 2022.07.14 |