[BOJ] 10808번 알파벳 개수

알파벳 개수 문제 << 클릭!




✅문제 설명

  • 입력 : 알파벳 소문자로만 이루어진 단어, 길이는 100을 넘지 않는다.
  • 출력 : a~z까지의 개수를 고배그로 구분해서 출력

❗핵심원리

  • char 자료형
    c++에서 char는 1byte 정수형 변수로 해당하는 문자의 ASCII 코드 값이 정수로 저장되어 있다. 따라서 char로 정수형 연산이 가능하다.
  • string은 일반 배열처럼 인덱스를 이용해서 한 문자(char형)씩 접근 가능하다.
  • 해당 문자열에 각 알파벳이 몇 개인지를 count하는 방법으로 접근하자!
  • 문자열의 각 문자와 알파벳 개수를 비교해서 count하는 방법은 알파벳 배열이 추가로 필요할 뿐만 아니라 더 복잡해지지 않을까?
    -> 생각해보자 문자열의 각 문자에 해당하는 알파벳 배열의 인덱스에 바로 접근하려면? = 아스키 코드를 이용한다. (다른 분들의 풀이 2 참고)
    -> char 타입은 연산이 가능하다는 것을 기억하자 (참고)

💻코드

#include <iostream>
#include <string>
using namespace std;

int main(void) {
    ios::sync_with_stdio(0);
    cin.tie(0);

    string S;
    int count = 0;
    cin >> S;

    for (char i = 'a'; i <= 'z'; i++) {
        for (int j = 0; j < S.size(); j++) {
            if (S[j] == i) {
                count++;
            }
        }
        cout << count << " "; // 굳이 배열로 저장하지 말고 바로 출력 
        count = 0; // 초기화 
    }
}


다른 분들의 풀이 (출처:http://boj.kr/ece8236c02cf46aba9933f28e358b51c)

#include <bits/stdc++.h>
using namespace std;

int main(void) {
  ios::sync_with_stdio(0);
  cin.tie(0);
  string s;
  cin >> s;
  for(char a = 'a'; a <= 'z'; a++){
    int cnt = 0;
    for(auto c : s)
      if(a == c) cnt++;
    cout << cnt << ' ';
  }
}
  • Ranged-based for loops를 이용
    : for ( init-statement(optional)range-declaration : range-expression )
    : 범위 기반 for문은 각 array의 요소를 반복하여 init-statment range-delcatation에 선언된 변수에 현재 배열 요소의 값을 할당.
    : 이때 해당 변수는 배열의 요소와 같은 자료형이어야 한다. 그렇지 않으면 형 변환이 발생한다.
    : 보통 auto 라는 키워드를 통해 c++이 자료형을 추정하게 만든다.


다른 분들의 풀이2 (출처:https://www.acmicpc.net/source/share/d7178d89538a42ababf4455443e60fe2)

#include <bits/stdc++.h>
using namespacestd;

int freq[26]; // 각 문자의 등장횟수 저장 배열 
int main(void) {
	ios::sync_with_stdio(0);
	cin.tie(0);
	string s;
	cin >> s;

	for(auto c : s)
		freq[c-'a']++; // 아스키 코드 참조!!
	for(int i=0; i < 26; i++)
		cout << freq[i] << ' ';
}
  • 즉 해당 문자가 입력되면 c-'a'를 통해 해당 문자의 알파벳 배열의 원소 값을 +1해준다.
    예를 들어 c = 'a'이면 0번째(97-97) 인덱스(a)에 접근 c = 'z'이면 25번째(122-97=25) 인덱스(z)에 접근



    기본부터 하나씩 다지면서 차근차근!

좋은 웹페이지 즐겨찾기