[백준 BOJ] 10808번 알파벳 개수 (C언어)
2022. 2. 5. 23:35ㆍPS (Program Solving)/BOJ (백준)
문제 설명
https://www.acmicpc.net/problem/10808
접근 방법 - 배열과 아스키코드를 이용한 수학 문제
백준의 10808번 문제는 배열과 아스키코드를 적절히 사용하여 해결해야 하는 문제이다.
해당 문제는, 입력받은 문자열에 대하여 A~Z의 각 빈도수를 측정해야 하는 문제이다.
빈도수 측정와 관련해 다른 문제에 대해 이전에 작성한 글이 있다. 아래에 링크를 기재해놓으니 참고해보길 바란다.
https://smary-it.tistory.com/73
위와 다른 점이 있다면, 해당 문제는 다수를 대상으로 한 카운팅 문제이기 때문에 배열을 사용했다.
필자는 아래처럼 코드를 작성하여 문제를 해결하였다.
이러한 문제에 많이 익숙하지 않다면, 아래 순서 중 3) 과정과 이 부분의 코드를 유심히 보길 바란다.
코드의 실행 순서
1) 문자열을 입력받을 공간인 배열 ch와 문자 빈도수를 측정할 배열 c를 전역 변수로 선언한다.
(이때, c의 배열 크기는 26으로 설정한다.)
2) 단어(ch)를 입력받는다.
3) 문자열 ch를 반복문으로 탐색하며 다음과 같은 연산을 수행한다.
- 탐색한 문자의 아스키코드값에 'a'를 뺀다.
ex) a의 경우: 0 / c의 경우: 2 / d의 경우: 3 / ...
- 위 값을 배열 번호로 갖는 c의 배열값에 1을 더한다.
4) 모든 연산이 끝나면, 최종적으로 저장된 배열 c의 모든 배열값을 출력한 뒤 실행 종료한다.
반응형
성공한 코드
#define _CRT_SECURE_NO_WARNINGS
#pragma warning(disable: 4996)
#include <stdio.h>
#include <string.h>
//백준 10808번 코드
char ch[100];
int c[26];
int main() {
scanf("%s", &ch);
for (int i = 0; i<strlen(ch); i++) {
c[ch[i] - 'a']++;
}
for (int i = 0; i < 26; i++) {
printf("%d ", c[i]);
}
}
제출 결과
(2021.12.22 백준 10808번 문제 제출 결과)
반응형
'PS (Program Solving) > BOJ (백준)' 카테고리의 다른 글
[백준 BOJ] 10818번 최소, 최대 (C언어) (0) | 2022.02.06 |
---|---|
[백준 BOJ] 10809번 알파벳 찾기 (C언어) (0) | 2022.02.06 |
[백준 BOJ] 10807번 개수 세기 (C언어) (0) | 2022.02.05 |
[백준 BOJ] 10799번 쇠막대기 (C++/cpp) (0) | 2022.02.05 |
[백준 BOJ] 10773번 제로 (C++/cpp) (0) | 2022.02.05 |