PS (C, C++)

[백준/C & C++] 1439 뒤집기

최연재 2023. 2. 1. 18:35

https://www.acmicpc.net/problem/1439

 

1439번: 뒤집기

다솜이는 0과 1로만 이루어진 문자열 S를 가지고 있다. 다솜이는 이 문자열 S에 있는 모든 숫자를 전부 같게 만들려고 한다. 다솜이가 할 수 있는 행동은 S에서 연속된 하나 이상의 숫자를 잡고 모

www.acmicpc.net

C

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

char input[1000001];
int main()
{
	int len_0 = 0, len_1 = 0;
	scanf("%s", &input);

	for (int i = 1; i < strlen(input); i++)
	{
		if (input[i - 1] != input[i]) (input[i - 1] == '0') ? len_0++ : len_1++;
		if (i == strlen(input) - 1) (input[i] == '0') ? len_0++ : len_1++;
	}
	
	printf("%d", (len_0 > len_1) ? len_1 : len_0);
	return 0;
}

C++

#include <iostream>
#include <cstring>
using namespace std;

char input[1000001];
int main()
{
	int len0 = 0, len1 = 0, result;
	cin >> input;

	for (int i = 1; i < strlen(input); i++)
	{
		if (input[i - 1] != input[i]) input[i - 1] == '0' ? len0++ : len1++;

	}
	input[strlen(input)-1] == '0' ? len0++ : len1++;
	result = (len0 > len1) ? len1 : len0;
	cout << result;
	return 0;
}

 

코드 설명

연달아서 0이 나오는 횟수, 1이 나오는 횟수를 구한 뒤에 더 작은 값을 출력하면 된다.

문자열을 입력받고 반복문을 이용해서 횟수를 센다. i=1부터 strlen(input)-1까지 반복문을 도는데, input[i-1]과 input[i]를 비교해서 같지 않을 경우에는 input[i-1]이 '0'이면 연달아 0이 나오는 횟수( len0)를 증가시키고, 그렇지 않을 경우 연달아 1이 나오는 횟수(len1)를 증가시킨다. input[strlen(input)-1]의 값도 확인해서 0이면 len0을 증가시키고, 그렇지 않으면 len1을 증가시킨다. len0과 len1을 비교해서 더 작은 값을 결과로 출력하고 프로그램을 종료한다.

 

느낀 점

연달아서 0이 나오는 횟수, 1이 나오는 횟수를 구한 뒤에 더 작은 값을 출력하면 된다는 것을 파악한 뒤에 빠르게 풀었던 문제다.