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


[알고리즘풀이]

L 부터 R 까지의 수 중에서 8이 제일 적은 수를 찾는 문제다.

먼저, L 과 R의 자릿수가 다르다면 무조건 8을 하나도 안쓰는 수를 만들 수 있다.

ex) L은 3자리, R은 4자리 숫자이면 사이에는 1000이 무조건 존재한다.

L 과 R의 자릿수가 같다면, 자릿수가 큰 쪽부터 순회를 해주며 check를 해야 된다.

i번 째 자릿수인 L[i] 와 R[i] 가 모두 8이라면 i번 째 자릿수는 8이 와야 된다.

하지만, 그전에 L[j] 와 R[j] (j < i) 에서 숫자가 다른 적이 있다면 i번 째 값은 항상 8이 아닌 사이에 있는 수를 집어넣을 수 있다.

ex)

78 88 에서 첫 번째 자릿수가 7과 8로 다르므로, 그 뒤에 자릿수는 8이 아닌 다른 사이에 있는 수를 무조건 넣을 수 있다.

#include<iostream>
#include<string>

using namespace std;

int main(void) {
	ios::sync_with_stdio(false);
	cin.tie(0);
	string L, R;
	cin >> L >> R;

	int ans = 0;
	if(L.length() == R.length()){
		bool flag = false;
		for (int i = 0; i < L.length(); i++) {
			if (L[i] != R[i])
				flag = true;
			if (flag)
				continue;
			if (L[i] == R[i] && L[i] == '8')
				ans++;
		}
	}
	cout << ans;
}

 

+ Recent posts