STUDY/Algorithm

[백준] 1439 뒤집기 C,C++

sinawi95 2022. 3. 12. 09:20
728x90

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

 

1439번: 뒤집기

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

www.acmicpc.net

그리디 문제이다. 문자열이 주어졌을때 뒤집어서 같은 숫자를 만들어야한다.

뒤집는 횟수를 구하기 위해 값이 바뀔때마다 하나씩 체크하고 2로 나누어주면된다. (2로 나눈 이유는 예제 입출력에서 규칙을 찾아내었다.)

#include<stdio.h>

int main() {
	char s[1000000];
	int cnt = 1, i;
	scanf("%s", s);
	for (i = 1; s[i] != '\0'; i++) {
		if (s[i] != s[i - 1]) {
			cnt++;
		}
	}
	printf("%d\n", cnt / 2);
	return 0;
}

위 코드는 문자열의 길이가 최대 1,000,000 이므로 그만큼 자리를 차지해야한다. 이를 해결하기 위해 char 하나씩 가져오면서 확인하면 사이즈도 줄일수 있다.

#include<stdio.h>
int main() {
	int cnt=0;
	char p='\0', c;
	while (1)
	{
		c = getchar();
		if (c == '\0' || c == '\n') {
			break;
		}
		if (p != c)
			cnt++;
		p = c;
	}
	printf("%d\n", cnt / 2);
	return 0;
}

오늘은 오전 오후 모두 코테가 있어서 쉬운 문제로 하나푼다.