PS
백준 1105. 팔
tose33
2021. 8. 24. 15:08
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을 integer가 아닌 string 형태로 입력받는다.
L의 마지막 인덱스 (일의자리)부터 순회하면서 해당 자리가 8이라면 +1을한 9로 만들어주고 그 아래 자리를 모두 0으로 만든다. 만들어진 새로운 L을(stoi로 int로 변환후) R과 비교해서 새로운 L이 R보다 크다면 이전 L이 정답이다.
답을 찾았으니 반복문을 탈출후 L의 8의 갯수를 샌다.
#include <iostream>
#include <string>
using namespace std;
string L, R;
int main()
{
cin >> L >> R;
int LSize = L.size();
int intR = stoi(R);
for(int i = LSize-1; i >= 0; i--)
{
if(L[i] == '8')
{
// 임시저장
string temp = L;
// i번째 자리는 1을 더한 9로, 아래자리들은 모두 0으로
L[i] = '9';
// 아래자리 다 0으로
for(int j = i+1; j < LSize; j++)
{
L[j] = '0';
}
// 변경후 L이 R보다 크다면 변경전이 8이 가장적게 들어있는 수
if(stoi(L) > intR)
{
L = temp;
break;
}
}
}
// 8 카운트
int cnt = 0;
for(int i = 0; i < LSize; i++)
if(L[i] == '8')
cnt++;
cout << cnt;
}