티스토리 뷰

문제 설명

질문한 세 자리의 수, 스트라이크의 수, 볼의 수를 담은 2차원 배열 baseball이 매개변수로 주어질 때, 가능한 답의 개수를 return 하도록 solution 함수를 작성해주세요.

baseball :[[123, 1, 1], [356, 1, 0], [327, 2, 0], [489, 0, 1]]
return 2 : (324, 328)

해결 방법

숫자 야구에서는 같은 숫자가 나오면 안됩니다. 또한 0도 안된다고 합니다.

숫자 야구의 작은 경우 123과 가장 마지막 경우인 987까지를 baseball 변수와 비교해서 만족하면 값을 더하는 방식을 이용했습니다.

각 숫자를 비교할 때 편하게 하기 위해 string은 [ ] 참조 방식이 가능하기 때문에 to_string함수를 이용해서 int를 string으로 바꿨습니다. 

같은 숫자 안나오기 위해 0,2번째가 같은 경우 0, 1번째가 같은 경우 1, 2번째가 같은 경우와 

0, 1, 2번째가 모두 0인 경우는 continue를 실행 했고

123이 정답일 경우 baseball의 과정이 맞는지 확인해서 맞으면 값을 올렸습니다. 이후 987까지 반복합니다.

소스코드

#include <string> #include <vector> using namespace std; int solution(vector<vector<int>> baseball) { int answer = 0; int strike = 0; int ball = 0; int flag = true; string num1 = ""; string num2 = ""; for (int i = 123; i <= 987; i++) { num1 = to_string(i); if (num1[0] == num1[1] || num1[0] == num1[2] || num1[1] == num1[2]) continue; else if (num1[0] == '0' || num1[1] == '0' || num1[2] == '0') continue; flag = true; for (int j = 0; j < baseball.size(); j++) { strike = 0; ball = 0; for (int a = 0; a < 3; a++) { for (int b = 0; b < 3; b++) { num2 =to_string(baseball[j][0]); if (a == b&&num1[a] == num2[b]) { strike++; continue; } if (a != b&&num1[a] == num2[b]) { ball++; continue; } } } if (strike != baseball[j][1] || ball != baseball[j][2]) { flag = false; break; } } if (flag == true) { answer++; } } return answer; }


공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/04   »
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
글 보관함