Dolphins의 HelloWorld
Programmers > 코딩테스트 연습 > 완전탐색 > 숫자야구 본문
문제링크 : https://programmers.co.kr/learn/courses/30/lessons/42841
풀이
완전탐색을 이용해 이 문제를 풀 수 있다는 것을 알아낸다면 그렇게 어려운 문제는 아니나
이를 깨닫지 못해 꽤 오랫동안 풀었던 문제이다.
가능한 답이 되는지 검사해볼 수는 모든 세자리 수 이므로 대충 900개라고 하고 질문은 최대
100개까지 할 수 있으므로 최대한 검사해도 90000번 검사를 수행하며 고로
완전탐색이 가능하다.
만약 문제가 잘 안풀린다면 반복문을 수행할 때 0이 나오는 경우를 배제하지 않았을 경우가
있으므로 이에 유의하도록 하자.
#include <iostream> #include <string> #include <vector> using namespace std; int solution(vector<vector<int>> baseball) { int answer = 0; for (int i = 123; i <= 987; i++) { int x = i % 10; int y = (i / 10) % 10; int z = (i / 100); if (x == 0 || y == 0 || z == 0) continue; if ((x == y) || (y == z) || (x == z)) continue; for (int j = 0; j < baseball.size(); j++) { int strike = 0; int ball = 0; int question = baseball[j][0]; int question_x = question % 10; int question_y = (question / 10) % 10; int question_z = (question / 100); if (question_x == 0 || question_y == 0 || question_z == 0) break; if (x == question_x) strike++; if (y == question_y) strike++; if (z == question_z) strike++; if (strike != baseball[j][1]) break; if ((x == question_y) || (x == question_z)) ball++; if ((y == question_x) || (y == question_z)) ball++; if ((z == question_x) || (z == question_y)) ball++; if (ball != baseball[j][2]) break; if (j == baseball.size() - 1) answer++; } } return answer; } int main() { vector<vector<int>> baseball{ {123,1,1},{356,1,0},{327,2,0},{489,0,1} }; printf("%d\n", solution(baseball)); }
'Algorithm > Programmers 문제풀이' 카테고리의 다른 글
Programmers > 코딩테스트 연습 > 탐욕법 > 조이스틱 (1) | 2018.11.30 |
---|---|
Programmers > 코딩테스트 연습 > 탐욕법 > 체육복 (0) | 2018.11.30 |
Programmers > 코딩테스트 연습 > DFS/BFS > 네트워크 (0) | 2018.10.21 |
Programmers > 코딩테스트 연습 > 동적계획법 > 타일장식물 (0) | 2018.10.16 |
Programmers > 코딩테스트 연습 > 완전탐색 > 카펫 (0) | 2018.10.01 |
Comments