본문 바로가기

알고리즘 공부 및 문제 풀이/백준(BOJ)

[boj] 백준 1105 팔 (c++)

[문제]

https://www.acmicpc.net/problem/1105

 

1105번: 팔

첫째 줄에 L과 R이 주어진다. L은 2,000,000,000보다 작거나 같은 자연수이고, R은 L보다 크거나 같고, 2,000,000,000보다 작거나 같은 자연수이다.

www.acmicpc.net

 

[풀이]

만약 두 수의 자릿수가 다르다면 답은 무조건 0이다. 그 사이에 10, 100, 1000 등이 존재하기 때문이다. 예를 들어, 1과 13 사이에는 10이, 120과 1200 사이에는 1000이 존재한다.

두 수의 자릿수가 같다면 앞에서부터 비교해봐야 한다. 8808과 8880에 대해 답은 2가 된다. 앞의 88은 바뀌지 않기 때문이다. 따라서 앞에서부터 각 자리수의 숫자가 달라질 때까지 비교해주며 8인 경우만 카운트 해준다.    

 

[코드]

 

#include <iostream>
#include <algorithm>
#include <map>
#include <string>

using namespace std;

int main() {
    ios_base::sync_with_stdio(false);
    cin.tie(NULL); cout.tie(NULL);

    string l, r;
    int cnt = 0;

    cin >> l >> r;
    if(l.length() != r.length())
        cout << "0";
    else{
        for(int i=0; i<l.length(); i++){
            if(l[i]==r[i] && l[i]=='8')
                cnt++;
            else if(l[i]!=r[i])
                break;
        }

        cout << cnt;
    }
}