※ 글쓴이는 취미로 코딩을 익혀보는 사람이라 정확하지 않은 내용을 담고 있을 수 있다 ※
이번에 볼 문제는 백준 1105번 문제인 팔이다.
문제는 아래 링크를 확인하자.
https://www.acmicpc.net/problem/1105
1105번: 팔
첫째 줄에 L과 R이 주어진다. L은 2,000,000,000보다 작거나 같은 자연수이고, R은 L보다 크거나 같고, 2,000,000,000보다 작거나 같은 자연수이다.
www.acmicpc.net
L과 R의 자릿수가 다르다면 더 작은 수의 자릿수만큼 '9'를 쓴 수가 L과 R 사이에 존재하므로 답은 0이 된다.
L과 R의 자릿수가 같고 첫째 자리 수가 서로 a와 b(a<b라 가정해도 일반성을 잃지 않는다.)로 다르다고 가정해보자. 이 때 a가 8이 아니라면 a 뒤에 9가 반복되는 꼴의 수, a가 8이라면 b는 9이므로 9 뒤에 0이 반복되는 꼴의 수가 a와 b 사이에 존재하게 된다. 따라서 이 경우 또한 답은 0이 된다.
L과 R의 자릿수가 같고 첫째 자리 수가 서로 같다면 그 자리가 8인지의 여부를 확인 후 8이면 답을 1 증가시키자. 그리고 L과 R에서 첫째자리를 뗀 L'과 R'을 새로운 L과 R로 해 다시 처음으로 돌아가 문제를 해결하자.
위의 과정을 통해 문제의 답을 구할 수 있다. 글쓴이는 위의 과정에서 불필요한 부분을 간략하게 줄여 아래와 같이 코드를 작성하였다.
아래는 제출한 소스코드이다.
#include <iostream>
#include <string>
using namespace std;
string s, t;
int slen, tlen;
int ans;
int main() {
ios::sync_with_stdio(0);
cin.tie(0);
cin >> s >> t;
slen = s.length(), tlen = t.length();
if (slen == tlen) {
for (int i = 0; i < slen; i++) {
if (s[i] != t[i]) break;
if (s[i] == '8') ans++;
}
}
cout << ans;
}
728x90
'BOJ' 카테고리의 다른 글
[BOJ 4500 // C++] “Bubble Gum, Bubble Gum, in the dish, how many pieces do you wish?” (0) | 2023.02.23 |
---|---|
[BOJ 2527 // C++] 직사각형 (0) | 2023.02.22 |
[BOJ 1326 // C++] 폴짝폴짝 (0) | 2023.02.22 |
[BOJ 2531 // C++] 회전 초밥 (0) | 2023.02.22 |
[BOJ 11637 // C++] 인기 투표 (0) | 2023.02.21 |