프로그래머스 숫자 야구
본문 바로가기
알고리즘 모음집/New 알고리즘

프로그래머스 숫자 야구

by KyeongMin 2020. 7. 22.
728x90
반응형

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

#include <string>
#include <vector>
#include <iostream>
#include<stdio.h>
using namespace std;
vector<int>a;
bool chk(vector<vector<int>> &baseball,vector<int> &num) {// 조건이 맞는지 체크
	int cnt = 0;
	for (int i = 0; i < baseball.size(); i++) {// 행 만큼 반복
		int strike = 0, ball = 0;
		int n100 = 0;
		int n10 = 0;
		int n1 = 0;
		n100 = baseball[i][0] / 100;
		n10 = (baseball[i][0] % 100)/10;
		n1 = (baseball[i][0] % 100) % 10;
		if (num[0] ==n100) {
			strike++;
		}
		if (num[1] == n10) {
			strike++;
		}
		if (num[2] == n1) {
			strike++;
		}
		if (num[0] == n10||num[0]==n1) {
			ball++;
		}
		if (num[1] ==n100||num[1]==n1) {
			ball++;
		}
		if (num[2] == n100||num[2]==n10 ) {
			ball++;
		}
		if (baseball[i][1] == strike && baseball[i][2] == ball) {
			cnt++;
		}
	}
	if (cnt == baseball.size()) { return true; }
	else return false;
}
void dfs(int idx,int num_chk[10],vector<vector<int>> &baseball,int &answer) {
	if (idx== 3) {
		//여기서 판별 같은 것인지
		//for (int i = 0; i < 3; i++) {
		//	cout << a[i];
		//}
		cout << endl;
		if (chk(baseball,a)) {
			answer++;
		}
		return;
	}
	for (int i = 1; i <= 9; i++) {
		if (num_chk[i] == 0) {
			num_chk[i] = 1;
			a.push_back(i);
			dfs(idx + 1, num_chk, baseball, answer);
			a.pop_back();
			num_chk[i] = 0;
		}
	}
}
int solution(vector<vector<int>> baseball) {
	int answer = 0;
	int num_chk[10] = { 0, }; // 순열시 중복 체크
	dfs(0, num_chk,baseball,answer);
	
	return answer;
}
int main(void) {

	cout << solution({ {123, 1, 1 }, { 356, 1, 0 }, { 327, 2, 0 }, { 489, 0, 1 } });
	return 0;
}

여기서 원래 123부터 987까지 반복하면서 같은수가 있는경우만 제외 시키면 더 간단 할 수 있었는데

요새 들어 재귀 순열을 하다보니 재귀 순열로 문제를 풀어버렸네요 

원래 알고리즘 방식이 여러가지지만 이번 문제는 굳이 순열까지 할필요 없었지만 한번쯤 적용해도 공부가 되니 좋은것 같네요 여러분들도 차근차근 도전해보세요.

728x90
반응형

'알고리즘 모음집 > New 알고리즘' 카테고리의 다른 글

프로그래머스 카펫  (0) 2020.07.23
15683 감시  (0) 2020.07.23
14503 로봇 청소기  (0) 2020.07.22
프로그래머스 모의고사  (0) 2020.07.20
프로그래머스 소수찾기  (0) 2020.07.20

댓글