Programmers Level2 숫자야구
돌파구
완전탐색을 이용해야 하는 문제다. 가능한 모든 경우의 수에 대해서 필터링을 거치는 대표적인 문제이다. 주어진 인풋을 다 통과하면 최종 답안이 되는 것이다. 앞서 포스팅 했던 후보키 문제와 동일한 방식이다.
이번에도 필터링을 거치기 전에, 가능한 모든 조합을 만드는 것이 오히려 더 중요하고 어려웠던 문제였다. 그래서 순열과 조합에 대한 글을 따로 할애했다.
학창시절 야구게임을 친구들과 해보았다면 알겠지만, 선택할 수 있는 숫자의 경우의 수는 1부터 9까지의 수 중에서 3개를 선택하는 것이고 순서에 의해서 숫자가 구분된다. => 즉 순열 알고리즘을 사용해야한다. 공식으로 나타내면 9P3 이다. [1, 2, 3, 4, 5, 6, 7, 8, 9]
의 배열에서 3개씩 선택해서 순열을 구한 후, 이 모든 경우의 수에 대해서 완전탐색을 실행하면 된다.
이 솔루션 함수 내에서의 로직을 다시 한 번 설명하면,
- 순열 알고리즘으로 모든 숫자야구에 사용될 수 있는 모든 수의 순열을 구하기
- 배열에 담긴 순열에 대해 완전탐색하기, 이 때 주어진 문제의 조건(strike, ball) 만 잘 비교 해 주면 된다.
- 주어진 입력에 대해서 모든 조건을 만족하면 최종 답안에 필터링 된다.