[백준/BOJ] 20310. 타노스 [Silver 2]

jychan99·2021년 11월 30일
0
post-thumbnail
  1. 타노스

문제출처 : https://www.acmicpc.net/problem/20310

처음에는 0의 개수와 1의갯수를세서 다시 배열해주면 되겠지~ 하고 냈더니 서브태스크 25점을 맞았다.
code1)

#include <stdio.h>
#include <string.h>

int main()
{
	int i, cnt0 = 0, cnt1 = 0;
	char S[500] = { 0 }, result[500] = { 0 };
	gets(S);
	int len = strlen(S);

	for (i = 0; i < len; i++)
	{
		if (S[i] == '0')
			cnt0++;
		if (S[i] == '1')
			cnt1++;
	}

	cnt0 = cnt0 / 2;
	cnt1 = cnt1 / 2;
	len = len / 2;

	for (i = 0; i < len; i++)
	{
		if (i < cnt0)
			result[i] = '0';
		else
			result[i] = '1';
	}

	puts(result);

	return 0;
}

문제를 다시읽어보니 재배열을 하는것이 아니라, 원래문자열에서 0과 1을 절반씩 없애는 것이였다.
사전순으로 정렬하랬으니까, 0은 뒤에서부터 삭제해주는것이 베스트고, 1은 앞에서부터 삭제해주는것이 베스트일것이다.

code2)

#include <stdio.h>
#include <string.h>

int main()
{
	int i, cnt0 = 0, cnt1 = 0;
	char S[500] = { 0 }, result[500] = { 0 };
	gets(S);
	int len = strlen(S);

	for (i = 0; i < len; i++)
	{
		if (S[i] == '0')
			cnt0++;
		if (S[i] == '1')
			cnt1++;
	}

	cnt0 /= 2; cnt1 /= 2;

	for (i = 0; i < len; i++)
		if (S[i] == '1' && cnt1 != 0)
		{
			S[i] = '2';
			cnt1--;
		}

	for (i = len - 1; i >= 0; i--)
		if (S[i] == '0' && cnt0 != 0)
		{
			S[i] = '2';
			cnt0--;
		}

	int j = 0;
	for (i = 0; i < len; i++)
	{
		switch (S[i])
		{
		case '1':
			result[j] = '1';
			j++;
			break;
		case '0':
			result[j] = '0';
			j++;
			break;
		case '2':
			break;
		}
	}

	puts(result);

	return 0;
}
profile
내가 지금 두려워 하고 있는 일이 바로 내가 지금 해야 할 일이다. 🐥

0개의 댓글