티스토리 뷰
#include <string>
#include <vector>
using namespace std;
int solution(vector<vector<int>> baseball) {
int answer = 0;
int first, second, third;
for(int i = 123; i <= 987; i++) {
first = i / 100;
second = (i % 100) / 10;
third = i % 10;
if(first == 0 || second == 0 || third == 0)
continue;
if (first == second || second == third || third == first)
continue;
int count = 0;
for(int j = 0; j < baseball.size(); j++) {
int strike = 0, ball = 0;
if(first == baseball[j][0] / 100)
strike++;
else if(first == (baseball[j][0] % 100) / 10 || first == baseball[j][0] % 10)
ball++;
if(second == (baseball[j][0] % 100) / 10)
strike++;
else if(second == baseball[j][0] / 100 || second == baseball[j][0] % 10)
ball++;
if(third == baseball[j][0] % 10)
strike++;
else if(third == baseball[j][0] / 100 || third == (baseball[j][0] % 100) / 10)
ball++;
if(strike == baseball[j][1] && ball == baseball[j][2])
count++;
}
if(count == baseball.size())
answer++;
}
return answer;
}
풀이: 2~3시간?
코딩+디버깅: 2시간
숫자 야구!
풀이 시간에 물음표가 붙은 이유는 이게 두 번째 시도라 확신하기 어렵기 때문이다. 첫 번째엔 3s 0b, 2s 0b, 1s 2b... 모든 경우의 수를 고려하는 풀이를 구했는데 진짜 아닌 것 같아서 구현은 안했다. 두 번째엔 strike와 ball에 대해 각각 3부터 0까지를 if문으로 만들어 돌렸다. 풀 때는 빨리 풀어버리고 싶어서 이거면 된다고 생각했는데 코드로 짜니까 답이 달랐다. 예외를 하나씩 찾으며 코드에 추가하는데 예외가 한 둘이 아니었다. 마치... 천동설을 주장하기위해 수많은 주전원을 찾아내는 천문학자가 된 기분이었다. 그 풀이도 아닌 것 같았다는 말이지...
결국 구글링했다. 푸신 분 풀이를 보니 strike와 ball의 수에 따라 작업을 하지 않고 각각의 수를 먼저 센 후 비교하셨다. 난 이 방식이 놀라웠다. 내 입장에서는 발상의 전환인 셈이라. 이런게 센스인가? 정말! 센스없게! 누가 그렇게 삽질을 하니! 바로 내가!
어떻게 풀었든 오래 시달린 만큼 꼭... 글을 남겨야겠다고 생각했다... 솔직히 당분간 보고싶지 않지만 그래서 더 정리해야만 한다... 이 모자람을 꼭 기억해서 다시 고생하지 않도록... 아... 당떨어져...
'프로그래밍 > 문제풀이' 카테고리의 다른 글
[BOJ] 9465 스티커 (0) | 2020.02.21 |
---|---|
[프로그래머스] 단어 변환 (0) | 2020.02.11 |
[BOJ] 1260 DFS와 BFS (0) | 2020.02.03 |
[BOJ] 11724 연결 요소의 개수 (0) | 2020.02.03 |
[BOJ] 11047 동전 0 (0) | 2020.01.21 |
댓글