Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
Tags
- c++
- 풀이
- BOJ Python
- SWEA
- BOJ
- 기계학습
- hackctf
- 드림핵
- 머신러닝
- hackerrank
- Javascript
- Sookmyung Information Security Study
- 파이썬
- siss
- lob
- C언어
- WarGame
- HTML
- 숙명여자대학교 정보보안동아리
- 웹페이지 만들기
- c
- CSS
- 숙명여자대학교 정보보안 동아리
- The Loard of BOF
- Python
- 자료구조 복습
- 백준
- PHP 웹페이지 만들기
- XSS Game
- 생활코딩
Archives
- Today
- Total
혜랑's STORY
[BOJ_C++] 2503번 : 숫자 야구 본문
code
#define _CRT_SECURE_NO_WARNINGS
#include <iostream>
#include <string>
#include <cstring>
using namespace std;
bool visited[1001];
int main() {
ios_base::sync_with_stdio(false);
cin.tie(NULL);
cout.tie(NULL);
int n, num, strike, ball, cnt = 0, s_cnt, b_cnt;
string temp, num_str;
memset(visited, true, sizeof(visited));
for (int i = 123; i < 1000; i++) {
temp = to_string(i);
if (temp[0] == temp[1] || temp[1] == temp[2] || temp[0] == temp[2])
visited[i] = false;
if (temp[0] == '0' || temp[1] == '0' || temp[2] == '0')
visited[i] = false;
}
cin >> n;
for (int i = 0; i < n; i++) {
cin >> num >> strike >> ball;
num_str = to_string(num);
for (int j = 123; j < 1000; j++) {
s_cnt = b_cnt = 0;
if (visited[j]) {
temp = to_string(j);
for (int x = 0; x < 3; x++) {
for (int y = 0; y < 3; y++) {
if (x == y && num_str[x] == temp[y]) {
s_cnt++; continue;
}
if (x != y && num_str[x] == temp[y]) {
b_cnt++; continue;
}
}
}
if (strike != s_cnt || ball != b_cnt)
visited[j] = false;
}
}
}
for (int i = 123; i < 1000; i++)
if (visited[i]) cnt++;
cout << cnt;
return 0;
}
- 먼저 123부터 999까지 같은 숫자가 여러 자리수에 존재하거나 0이 존재한다면 visited[i]에 답이 될 수 없음을 체크한다.
- 이후 n개의 질문만큼 for문을 수행하며 정답이 될 수 있는 가능성이 있는 수(visited[i] == true)라면 스트라이크와 볼을 검사하여 정답이 될 수 있나 확인한다.
- 정답이 되려면 입력받은 숫자와 i를 검사했을 때 스트라이크와 볼의 수가 같아야 한다. (x와 y는 입력받은 수(num)과 i의 자리 수이다.)
- 스트라이크 검사법 : 각 자리수가 같으면서 그 자리에 있는 값이 동일하다면 strike count를 증가시킨다.
- 볼 검사법 : 자리수는 다르지만 값은 동일하다면 ball count를 증가시킨다.
- 이후 영수가 대답한 스트라이크와 볼 수와 다르다면 정답이 될 가능성이 없는 수이므로 false를 넣어준다.
- 질문이 끝나면 정답 가능성이 있는 수를 모두 세어 출력한다.
결과
'무지성 공부방 > 알고리즘 해결' 카테고리의 다른 글
[BOJ_C++] 9663번 : N-Queen (0) | 2021.08.18 |
---|---|
[BOJ_C++] 12852번 : 1로 만들기 2 (0) | 2021.08.18 |
[BOJ_C++] 1012번 : 유기농 배추 (0) | 2021.08.17 |
[BOJ_C++] 1697번 : 숨박꼭질 (0) | 2021.08.17 |
[BOJ_C++] 1260번 : DFS와 BFS (0) | 2021.08.16 |