-
프로그래머스 - 숫자 야구알고리즘 풀이/프로그래머스 2019. 12. 6. 20:47
문제 : https://programmers.co.kr/learn/courses/30/lessons/42841
코딩테스트 연습 - 숫자 야구 | 프로그래머스
[[123, 1, 1], [356, 1, 0], [327, 2, 0], [489, 0, 1]] 2
programmers.co.kr
풀이 :
숫자 야구에 모든 경우의 수는 123 ~ 987까지이다. 이들을 하나하나 대입해보며 조건과 같다면
answer에 +1을 해주자.
코드 ( C++ )
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters. Learn more about bidirectional Unicode characters#include <string> #include <vector> #include <iostream> int visited[10]; using namespace std; vector<vector<int>> b; int ans = 0; void solve(vector<int>& v, vector<int>& picked) { if (picked.size() == 3) { string x; for (int i = 0; i < picked.size(); ++i) x += (picked[i] + '0'); bool check = true; for (int i = 0; i < b.size(); ++i) { int cand = stoi(x); int tar = b[i][0]; int strike = 0; int ball = 0; // 스트라이크 검사 while (tar != 0) { int num1 = tar % 10; int num2 = cand % 10; if (num1 == num2) { strike++; } tar /= 10; cand /= 10; } //볼 검사 string c = x; string t = to_string(b[i][0]); for (int a = 0; a < c.size(); ++a) for (int b = 0; b < t.size(); ++b) { if (a == b) continue; if (c[a] == t[b]) ball++; } // 조건이 아니라면 바로 종료 if (strike != b[i][1] || ball != b[i][2]) { return; } } if (check) { ans++; } return; } for (int i = 0; i < v.size(); ++i) { if (visited[i]) continue; picked.push_back(v[i]); visited[i] = true; solve(v, picked); visited[i] = false; picked.pop_back(); } } int solution(vector<vector<int>> baseball) { int answer = 0; vector<int> v = { 1,2,3,4,5,6,7,8,9 }; vector<int> picked; b = baseball; solve(v, picked); answer += ans; return answer; } int main() { cout << solution({ {123,1,1},{356,1,0},{327,2,0},{489,0,1} }) << "\n"; return 0; } '알고리즘 풀이 > 프로그래머스' 카테고리의 다른 글
프로그래머스 - 다리를 지나는 트럭 (0) 2019.12.14 프로그래머스 - H-Index (0) 2019.12.08 프로그래머스 - 위장 (0) 2019.12.05 프로그래머스 - 탑 (0) 2019.12.03 프로그래머스 - 디스크 컨트롤러 (0) 2019.12.01