티스토리 뷰
백준 온라인 저지(BOJ) 1316번 그룹 단어 체커
https://www.acmicpc.net/problem/1316
1316번: 그룹 단어 체커
그룹 단어란 단어에 존재하는 모든 문자에 대해서, 각 문자가 연속해서 나타나는 경우만을 말한다. 예를 들면, ccazzzzbb는 c, a, z, b가 모두 연속해서 나타나고, kin도 k, i, n이 연속해서 나타나기 때
www.acmicpc.net
* 사용언어 : C언어, C++
1. 문제
단어 내 모든 문자가 연속해서만 나타나는 경우 그룹 단어라고 함
주어진 N 개의 단어 중 그룹 단어의 개수를 출력
(단어는 모두 알파벳 소문자로만 구성, 최대 길이 100)
2. 풀이
ASCII 값, 반복문 그리고 배열 index 에 대한 이해가 필요한 문제입니다.
특정 문자의 반복이 끊겼다는 것을 확인하기 위해서
탐색 중인 문자가 직전 문자와 다를 때, 직전 문자는 끝이라는 기록을 했습니다.
(이후 해당 문자가 나오면 그룹 단어가 아니라는 뜻이 됨)
여기서 0번 index 는 1번 index 탐색 시 확인하고 처리되므로
문자열 탐색은 0 이 아닌 1 부터 진행합니다. (k = 1)
aabca 단어를 예로 들어 처리 과정을 보여드리고 풀이는 마치겠습니다.
0번 a (처리 X)
1번 a (a 기록 안 되어 있음 → pass / 직전 문자와 같으니 기록 X)
2번 b (b 기록 안 되어 있음 → pass / 직전 문자와 다르니 a 기록)
3번 c (c 기록 안 되어 있음 → pass / 직전 문자와 다르니 b 기록)
4번 a (a 기록 되어 있음→ fail 후 반복문 break)
3. 코드
#include <stdio.h>
int main() {
int n;
scanf("%d", &n);
int a[26] = { 0, };
char s[101];
int ret = 0;
int k, pass;
for (int i = 0; i < n; ++i) {
scanf("%s", &s);
for (int j = 0; j < 26; ++j) {
a[j] = 0;
}
k = 1;
pass = 1;
while (s[k]) {
if (a[s[k] - 'a']) {
pass = 0;
break;
}
if (s[k] != s[k - 1]) {
++a[s[k - 1] - 'a'];
}
++k;
}
ret += pass;
}
printf("%d\n", ret);
return 0;
}
'개발자 > 문제풀이 (C언어)' 카테고리의 다른 글
[백준/BOJ] 2292번 벌집 (C/C++) (0) | 2022.07.01 |
---|---|
[백준/BOJ] 1712번 손익분기점 (C/C++) (0) | 2022.06.30 |
[백준/BOJ] 2941번 크로아티아 알파벳 (C/C++) (0) | 2022.06.15 |
[백준/BOJ] 5662번 다이얼 (C/C++) (0) | 2022.06.14 |
[백준/BOJ] 2908번 상수 (C/C++) (0) | 2022.06.13 |
- Total
- Today
- Yesterday
- 동탄에듀센터2
- 세상을 읽는 새로운 언어 빅데이터
- 동탄에듀센터
- 유연함의힘
- 독서 감상평
- 영화감상평
- 관계가상처가되기전에
- 인간본성불패의법칙
- 삼성전자
- 여가포인트
- 자동차보험
- 독서감상평
- 문현공
- 나는늘잘해야한다고생각한다
- 이용제한
- JUNGOL
- 당신도느리게나이들수있습니다
- 호암의마지막꿈
- 나의첫죽음학수업
- 자료구조
- 정올
- 긴 자리 덧셈 뺄셈
- 쿠프마케팅
- 알고리즘
- 긴 자리 곱셈
- 최재천의공부
- AdSendse
- 센터독서클럽
- 시대예보
- 정세현의통찰
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 |