본문 바로가기

ascode 문제풀이

[ascode 문제풀이] 1006: 문자열중 문자의 갯수 구하기

오늘 풀어볼 문제는 배열에 대한 이해를 높여주는 문제!

문자열 중 문자의 갯수 구하기 문제이다!

 

http://www.ascode.org/problem.php?id=1006 

 

ascode.org discuss3

문제 설명 갑자기 교수님이 과제를 내셨다. 영어 원문을 주시면서 여기에 있는  문자 a가 몇개가 있는지 b가 몇개가 있는지 ... z가 몇개가 있는지 정리를 해서 자기 이메일로 보내라고 하셨다.  힘든 작업을 하게 될 차차를 위하여 도와주도록 하자.  입력 설명 문자열의 갯수 : TestCase  문자열의 최대 길이 : 2000자  문자열에는 소문자만 입력이 됩니다.  만약 문자가 발견되지 않았으면은 생략 할수 있습니다.  출력 설명 문자:갯수  문자:갯

www.ascode.org


조건분석

 

1. 입력될 문자열의 갯수가 입력된다.

2. 2000자 내의 소문자 알파벳이 입력된다.

3. 알파벳 갯수를 세어서 출력한다.

 

 

문제 해결

1 문자열을 입력받는다.

2. 알파벳 갯수와 같은 크기를 가진 int 배열을 만든다.

3. 각 알파벳에 번호를 할당하여 갯수를 센다.

4. 출력한다.

 

 


코드 작성

 

1. 입력 및 변수 설정

  int count[26] = { 0 };
  char string[2001] = { 0 };
  scanf("%s", string);

count : 알파벳 갯수를 저장할 공간입니다. 알파벳 갯수에 맞게 26개로 지정했습니다.

string : 문자열을 입력받는 공간입니다. null값을 포함해 2001자로 지정했습니다.

 

문자열을 입력 받을 때는 "%s"를 사용 합니다. 또, 다른 것들과 다르게 변수 앞에 &을 붙이지 않습니다.

 

 

 

2.  알파벳 갯수 세기

  int len = strlen(string);
  for (int i = 0; i < len; i++) {
   count[string[i] - 'a']++;
  }

len : 문자열의 길이를 뜻합니다.

strlen(string) : 문자열의 길이를 반환하는 함수입니다. <string.h>헤더파일을 추가하면 됩니다.

 

for문을 문자열 길이만큼 돌도록 지정했습니다.

 

string[i] - 'a' : 현재 문자는 소문자 알파벳일 겁니다! 만약에 string[i]의 값이 'e'라고 가정합니다.

                   'e' - 'a' = (아스키 코드 값 : 97) - (아스키 코드 값 : 101) = 4 이 값은 인덱스 값으로 이용

                   쉽게 생각하면 a는 0번째 알파벳, b는 1번째 알파벳, c는 2번째 알파벳과 같이 번호를 간소화

                   한거지요.

 

count[string[i]-'a']++ : 해당 알파벳이 저장된 위치의 값을 증가시킵니다! 

 

그 과정은 아래와 같습니다.

 

3. 출력하기

		for (int i = 0; i < 26; i++) {
			if (count[i]) {
				printf("%c:%d\n", i + 'a', count[i]);
			}
		}
		printf("\n");

for문을 알파벳 총 갯수만큼 돌립니다.

if(count[i]) : 값이 0이 아닌 경우에 출력합니다.

i+'a' : 인덱스 번호를 정할 때와 같이 아스키 코드 값을 이용해 알맞은 알파벳을 출력합니다.

%c : 한글자 문자를 출력할 때 사용합니다.

 


총 코드

#include <stdio.h>
#include <string.h>
#pragma warning (disable : 4996)

int main() {
	int TestCase;
	scanf("%d", &TestCase);

	while (TestCase--) {

		int count[26] = { 0 };
		char string[2001] = { 0 };

		scanf("%s", string);

		int len = strlen(string);
		for (int i = 0; i < len; i++) {
			count[string[i] - 'a']++;
		}
		
		for (int i = 0; i < 26; i++) {
			if (count[i]) {
				printf("%c:%d\n", i + 'a', count[i]);
			}
		}
		printf("\n");
	}
}