[백준 BOJ] 10808번 알파벳 개수 (C언어)

2022. 2. 5. 23:35PS (Program Solving)/BOJ (백준)

문제 설명

https://www.acmicpc.net/problem/10808

 

10808번: 알파벳 개수

단어에 포함되어 있는 a의 개수, b의 개수, …, z의 개수를 공백으로 구분해서 출력한다.

www.acmicpc.net

백준 BOJ 10808번 알파벳 개수 문제 사진

 

접근 방법 - 배열과 아스키코드를 이용한 수학 문제

백준의 10808번 문제는 배열과 아스키코드를 적절히 사용하여 해결해야 하는 문제이다.

해당 문제는, 입력받은 문자열에 대하여 A~Z의 각 빈도수를 측정해야 하는 문제이다.

빈도수 측정와 관련해 다른 문제에 대해 이전에 작성한 글이 있다. 아래에 링크를 기재해놓으니 참고해보길 바란다.

https://smary-it.tistory.com/73

 

[백준 BOJ] 10807번 개수 세기 (C언어)

문제 설명 https://www.acmicpc.net/problem/10807 10807번: 개수 세기 첫째 줄에 정수의 개수 N(1 ≤ N ≤ 100)이 주어진다. 둘째 줄에는 정수가 공백으로 구분되어져있다. 셋째 줄에는 찾으려고 하는 정수 v가

smary-it.tistory.com

위와 다른 점이 있다면, 해당 문제는 다수를 대상으로 한 카운팅 문제이기 때문에 배열을 사용했다.

필자는 아래처럼 코드를 작성하여 문제를 해결하였다.

이러한 문제에 많이 익숙하지 않다면, 아래 순서 중 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]);
	}
}

 

제출 결과

백준 BOJ 10808번 알파벳 개수 문제 C 제출 결과

(2021.12.22 백준 10808번 문제 제출 결과)

반응형