본문 바로가기

알고리즘/SWEA

8383

static char N[100000 + 1 + 1];
static int x, y, len;
static char ans[100000 + 1 + 1];

static void only_one(void)
{
	int v = N[0] - '0';
	if (v >= y)
		ans[0] = y + '0';
	else if (v >= x) //x <= v < y
		ans[0] = x + '0';
	else // v < x
		strcpy(ans, "-1");

	if (ans[0] == '0')
		strcpy(ans, "-1");
}

static void several(void)
{
	int diff = 0, i;
	for (i = 0; i < len; i++)
	{
		int v = N[i] - '0';

		if (diff)
			break;
		else
		{
			if (v >= y)
				ans[i] = y + '0';
			else if (v >= x)
				ans[i] = x + '0';
			else
			{
				for (i -= 1; i >= 0; i--)
				{
					if (ans[i] == y + '0')
					{
						ans[i] = x + '0';
						break;
					}
				}

				if (i < 0)
					ans[++i] = '0';
			}
		}
		
		diff = N[i] - ans[i];
	}
	
	if (i < len)
		memset(ans + i, y + '0', sizeof(char) * (len - i));
}

static void solution(void)
{
	scanf("%s %d %d\n", N, &x, &y);
	len = strlen(N);

	if (len == 1)
		only_one();
	else
		several();

	if (ans[0] == '0')
		printf("%s\n", ans + 1);
	else
		printf("%s\n", ans);
	memset(ans, 0, sizeof(ans));
}

샘플 테스트 케이스 외에 아래의 케이스도 따져봐야 한다.

 

4242133 2 4
20009 2 3

 

그리고 문제의 조건 중에 양의 정수를 선물 하고자 한다 하였는데, 이 부분을 제대로 읽지 못해 여러 번 실패 했다.

문제를 잘 읽어 봐야 겠다.

'알고리즘 > SWEA' 카테고리의 다른 글

5656  (0) 2021.11.04
7830  (0) 2021.11.04
7793  (0) 2021.11.04
8382  (0) 2021.11.04
5658  (0) 2021.11.04