본문 바로가기

Algorithm/문자열 처리

Baekjoon 16676 근우의 다이어리 꾸미기

Link https://www.acmicpc.net/problem/16676

소스결과 1988 KB / 0 ms

출처 Baekjoon, KCPC 2018

언어 C++ 17

분류 문자열 처리

 

설명

다이어리를 꾸미려는 근우를 위해 스티커 팩을 몇 개 사야하는지 알려주자

 

결과값 = 문자열 길이 라고 생각하면 함정이 빠지게 된다.

N을 출력한다면 문제가 없지만 0 ~ N 까지이기 때문에 각 자리 숫자가 최대로 중복되는 경우를 생각 해야 한다.

처음으로 각 자리가 중복 가능한 수는 모든 자리가 1인 경우이기 때문에 모든 자리의 수가 1인 경우의 수보다 작은 경우라면 결과값에서 -1을 해줘야한다.

 

알고리즘

1. 문자열을 입력 받는다.

2. 문자열의 길이를 계산한다.

3. 문자열의 길이만큼 1이 포함되는 경우가 존재하는지 판단한다.

4. 3의 조건을 만족하면 문자열의 길이를, 만족하지 않으면 문자열 길이 -1을 출력한다.

 

소스코드

#include <iostream>
#include <cstring>

using namespace std; 

char input[11] = {};

bool isUnder()
{
	if (input[0] < '2')
	{
		for (int i = 1; input[i] != '\0'; i++)
			if (input[i] > '2')
				break;
			else if (input[i] == '0')
				return true;
	}

	return false;
}

int main()
{
	cin >> input;

	int len = strlen(input);

	cout << len - isUnder();

	return 0;
}