[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)에 접근
기본부터 하나씩 다지면서 차근차근!
Author And Source
이 문제에 관하여([BOJ] 10808번 알파벳 개수), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@juijeong8324/BOJ-10808번-알파벳-개수저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)