반응형
이번 문제는 문제의 뜻을 잘 이해할 필요가 있습니다.
같은 구성이라는 것은 문자의 종류와 그 개수가 동일한 경우를 말합니다. GOD와 DOG는 문자의 종류와 그 개수가 동일하기 때문에 같은 구성이 됩니다. 그런데 비슷한 단어는 문자를 하나 추가하거나 뺌으로써 같은 구성이 되는 단어를 뜻합니다. 순서와는 상관없다는 것이죠. DOG와 GOOD는 비슷한 단어가 됩니다.
이것만 잘 이해하시면 문제를 푸는데 있어서 어려움은 없습니다. 난이도는 현재 실버 2등급 문제이지만, 문제만 잘 이해하셨다면 구현 난이도는 더 낮습니다.
https://www.acmicpc.net/problem/2607
저는 check()란 함수를 만들어서 여기서 영문자 26글자에 대한 빈도를 계산하도록 했습니다. 단어의 문자들을 차례대로 보면서 해당 영문자의 개수만 올리면 됩니다.
그런후에 기준 단어에서의 문자들별로 추가되어야할 문자가 있는 경우에는 plus를 증가시키고, 빼야할 문자가 있는 경우에는 minus를 증가시켜서 두 변수의 합이 1을 넘지 않도록 했습니다.
제가 작성한 소스입니다.
//------------------------------------------
// baekjoon #2607
// - by Aubrey Choi
// - created at 2019-08-27
//------------------------------------------
#include <stdio.h>
#include <memory.h>
void check(char word[], int v[])
{
memset(v, 0, sizeof(int)*26);
for(int i = 0; word[i]; i++) v[word[i] - 'A']++;
}
int main()
{
int n, v[26], f[26], ans=0;
char word[12];
scanf("%d%s", &n, word);
check(word, v);
while(--n)
{
scanf("%s", word);
check(word, f);
int plus = 0, minus = 0;
for(int i = 0; i < 26; i++)
{
if(f[i] > v[i]) plus += f[i] - v[i];
else if(f[i] < v[i]) minus += v[i] - f[i];
}
if(plus <= 1 && minus <= 1) ans++;
}
printf("%d\n", ans);
}
728x90
'Programming > BOJ' 카테고리의 다른 글
[C/C++] 백준 #2621 카드게임(구현) (0) | 2024.04.30 |
---|---|
[C/C++] 백준 #2608 로마 숫자(구현) (2) | 2024.04.26 |
[C/C++] 백준 #2606 바이러스(너비 우선 탐색) (0) | 2024.04.19 |
[C/C++] 백준 #2591 숫자카드(동적계획법) (0) | 2024.03.22 |
[C/C++] 백준 #2589 보물섬(너비 우선 탐색) (0) | 2024.01.22 |
댓글