문제를 해석해보면 8이 얼마나 범위 이내에서 같은자리수에 존재하는지를 찾는것이므로 string으로 자리수 비교를 통해서 풀 수 있다고 생각했다.
# include <iostream>
# include <string>
using namespace std;
int check(string L, string R) {
if (L.length() != R.length()) {
return 0;
}
else if (L[0] == R[0]) {
if (L[0] == '8') {
if (L.length() > 1) return 1 + check(L.substr(1), R.substr(1));
else return 1;
}
else {
if (L.length() > 1) return check(L.substr(1), R.substr(1));
else return 0;
}
}
else {
return 0;
}
}
int main() {
string L, R;
cin >> L >> R;
int cnt = check(L, R);
cout << cnt;
return 0;
}
이 문제를 풀면서 느끼게 된 것은, 생각보다 예외처리를 꼼꼼하게 하기 힘들다는 것이다.
처음에는 첫자리가 8이 아닌경우에는 답이 없다고 생각해서 제외했었는데 1887 1888의 예외에 당했다.
따라서 코드를 무작정 작성하기보다는 정말 내가 세운 가설이 맞는지를 검증하는 단계가 필요할 것 같다.
ex) 8이 아닌수로 시작하면 절대 안되는것이 맞나?