문제
https://www.acmicpc.net/problem/1105
문제해설
L과 R이 주어진다.
L부터 시작해서 R까지의 수 중에서
8이 가장 적게 들어있는 수의
8의 개수를 세어주면 된다.
문제풀이
아이디어만 떠올리면 구현은 어렵지 않다.
우선 두 숫자의 자리수가 다르다면 답은 무조건 0이다.
예를들어 88과 300이 주어진다면 그 사이에 무조건 100이 있기 때문이다.
그럼 자리수가 같을 때를 생각해보자
883802과 883824가 있다고하면
답은 3이 될 것이다.
왜냐하면 어떻게해도 앞의 8838은 바뀌지 않기 때문이다.
이제 느낌이 왔을텐데
가장 큰 자리수부터 보면서 각 자리수의 숫자가 달라질 때까지
8의 개수를 세어주면 된다.
전체코드
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#include<iostream>
using namespace std;
int main() {
ios::sync_with_stdio(false); cin.tie(NULL); cout.tie(NULL);
string a, b; cin >> a >> b;
if (a.length() != b.length()) {
cout << 0;
return 0;
}
int cnt = 0;
for (int i = 0; i < a.length(); i++) {
if (a[i] == b[i] && a[i] == '8')
cnt++;
else if (a[i] != b[i])
break;
}
cout << cnt;
return 0;
}