반응형
알고리즘 구성
1. 단어 개수(N) 입력받기
int N;
scanf("%d", &N);
2. 그룹 단어의 개수(count)를 N으로 초기화 (일단 N개로 가정 후 그룹단어가 아닐 시에 한개 씩 마이너스 시킬 예정)
int count = N;
3. N개의 단어를 처리하기 위한 반복문 작성
for (int i = 0; i < N; i++)
4. 단어를 받기 위해 str 배열 사용 (문자열 하나씩 확인하기에 용이)
char str[100];
scanf("%s", str);
5. 각 알파벳이 등장했는지 여부를 배열로 확인함(check 배열)
bool check[26] = { false };
6. prev_char는 이전 문자를 저장, is_group_word는 그룹 단어 맞는지 확인
int prev_char = 0;
bool is_group_word = true;
7. 내부 반복문으로 문자열 하나씩 검사(0 ~ streln(str)까지)
for (int j = 0; j < strlen(str); j++)
8. 현재 문자가 나왔는지 확인하기 위해서 alphabet인덱스를 계산함 (a의 아스키 코드 값이 97이므로 97을 뺌)
int alphabet = str[j] - 97;
9. 지금 문자열이 이전에 안나왔으면(check[alphabet]이 false면) check를 true로 바꾸고 prev_char에다가 지금 문자열의 인덱스를 넣음
if (check[alphabet] == false) {
check[alphabet] = true;
prev_char = alphabet;
}
9-2. 만약에 이미 나온 문자열이면 지금 문자열 인덱스(alphabet)랑 이전의 문자열의 인덱스(prev_char)가 다르다면 그룹단어가 아님(is_group_word를 false로 변경) -> 이후 문자열 확인할 필요 없으므로 break 통해 반복문 탈출
else {
if (alphabet != prev_char) {
is_group_word = false;
break;
}
}
10. is_group_word가 false인 경우에 count를 하나씩 줄임
if (is_group_word == false)
count--;
11. 그룹단어의 수 (count) 출력
printf("%d", count);
답..
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdbool.h>
#include <string.h>
int main(void) {
int N;
scanf("%d", &N);
int count = N;
for (int i = 0; i < N; i++) {
char str[100];
scanf("%s", str);
bool check[26] = { false };
int prev_char = 0;
bool is_group_word = true;
for (int j = 0; j < strlen(str); j++) {
int alphabet = str[j] - 97;
if (check[alphabet] == false) {
check[alphabet] = true;
prev_char = alphabet;
}
else {
if (alphabet != prev_char) {
is_group_word = false;
break;
}
}
}
if (is_group_word == false)
count--;
}
printf("%d", count);
return 0;
}
반응형
'코딩해요 > C' 카테고리의 다른 글
[백준/C언어] 2292번: 벌집 (0) | 2024.07.09 |
---|---|
[백준/C언어] 11005번: 진법 변환2 (0) | 2024.07.09 |
[백준/C언어] 약수, 배수와 소수 문제풀이 (0) | 2024.05.22 |
[코드업/C언어] 기초-비트시프트연산, 비교연산, 논리연산 (0) | 2024.05.14 |
[백준/C언어] 문자열 11718번: 그대로 출력하기 (0) | 2024.05.08 |