※ 글쓴이는 취미로 코딩을 익혀보는 사람이라 정확하지 않은 내용을 담고 있을 수 있다 ※

 

이번에 볼 문제는 백준 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

+ Recent posts