본문 바로가기

Algorithm/문자열 처리

Baekjoon 16674 2018년을 되돌아보며

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

소스결과 1984 KB / 0 ms

출처 Baekjoon, KCPC 2018

언어 C++ 17

분류 문자열처리

 

설명

주어진 수가 2018과 관련 없는 수인지, 관련있는 수인지, 밀접한 수인지, 묶여있는 수인지 구분해서 출력해주자

 

양의 정수 n의 범위가 int 범위에 포함 되지만 처리는 문자열 처리와 비슷하기에 입력을 문자열로 받는다.

각 자리의 수를 헤아리기위한 배열을 두어 각 자리의 수를 헤아리면 된다.

 

알고리즘

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

2. 입력된 자리의 수를 카운팅 한다.

3. 2, 0, 1, 8중 다른 수가 존재하면 0을 출력한다.

4. 2, 0, 1, 8중 한개라도 0이면 1을 출력한다.

5. 2, 0, 1, 8중 한개라도 개수가 다르면 2를 출력한다.

6. 3, 4, 5 조건을 전부 만족하면 8을 출력한다.

 

소스코드

#include <iostream>

using namespace std;

int digits[10];

int main()
{
	int res = 1;
	char input[11];

	cin >> input;

	for (int i = 0; input[i] != '\0'; i++)
		digits[input[i] - '0']++;

	// Related
	for (int i = 0; i < 10; i++)
	{
		if (i == 0 || i == 1 || i == 2 || i == 8)
			continue;

		if (digits[i] != 0)
		{
			res = 0; break;
		}
	}

	if (res != 0)
	{
		res = 1;
		if (digits[0] && digits[1] && digits[2] && digits[8])
		{
			res = 2;
			if (digits[0] == digits[1] && digits[1] == digits[2] && digits[2] == digits[8])
				res = 8;
		}
	}

	cout << res;
	return 0;
}