L과 R이 주어진다. 이때, L보다 크거나 같고, R보다 작거나 같은 자연수 중에 8이 가장 적게 들어있는 수에 들어있는 8의 개수를 구하는 프로그램을 작성하시오.
첫째 줄에 L과 R이 주어진다. L은 2,000,000,000보다 작거나 같은 자연수이고, R은 L보다 크거나 같고, 2,000,000,000보다 작거나 같은 자연수이다.
첫째 줄에 L보다 크거나 같고, R보다 작거나 같은 자연수 중에 8이 가장 적게 들어있는 수에 들어있는 8의 개수를 구하는 프로그램을 작성하시오.
1 10
0
8의 개수를 찾는 경우는 다음과 같다.
- L과 R의 자릿수가 다를 경우, 무조건 8을 안 쓰는 경우가 생긴다. 예를 들어, 8과 10이 있다면 9가 가능하고 98 100이라면 99가 가능하듯이.
- 둘의 자릿수는 같을 경우, 가장 큰 자릿수에서부터 수가 다르지 않을 때, 8의 개수만큼 8이 들어간다. 예를 들어 881과 888이 있을 경우, "88"은 무조건 고정이 될 수 밖에 없다. 8870과 8874가 있을 경우에도 "887"이 고정이긴 하지만, 8이 아니므로 2개가 된다. 즉 가장 큰 자릿수부터 두 수가 일치하는 범위 내에 8의 개수를 구한다.
const fs = require('fs');
let [L, R] = fs.readFileSync(0, 'utf-8').toString().trim().split(' ');
let counter = 0;
if (L.length != R.length) {
console.log(counter);
} else {
for (let i = 0; i < L.length; i++) {
if (L[i] != R[i]) break;
if (L[i] === '8') counter++;
}
console.log(counter);
}
그리디 풀이 확률이 좀 예전치 못한 것 같다.... ㅎ