https://www.acmicpc.net/problem/1439
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이 나오는 횟수를 구한 뒤에 더 작은 값을 출력하면 된다는 것을 파악한 뒤에 빠르게 풀었던 문제다.
'PS (C, C++)' 카테고리의 다른 글
[백준/C & C++] 1935 후위 표기식2 (0) | 2023.02.03 |
---|---|
[백준/C & C++] 1966 프린터 큐 (2) | 2023.02.02 |
[백준/C & C++] 1347 미로 만들기 (0) | 2023.01.31 |
[백준/C & C++] 3273 두 수의 합 (0) | 2023.01.30 |
[백준/C & C++] 2740 행렬 곱셈 (0) | 2023.01.29 |