자료구조에는 기본 자료형 3대장이 있습니다.
1. 정수(Integer)
2. 실수(Float)
3. 문자열(String)
이 중 문자열에 대해 간단하게 알아보고 백준 문제를 풀겠습니다.
우선 문자(character)에 대해 간단하게 알아보겠습니다.
컴퓨터는 0과 1만 알고 있는 계산기입니다.
그런데 어떻게 영어 소문자 혹은 영어 대문자 등을 표현할 수 있을까요?
바로 문자 인코딩을 통해 해당 2진수를 특정 문자와 매칭시킨 것입니다.
예시로 대문자 A 글자 1개를 표현하고 싶다면 2진수 01000001을 입력하면 됩니다.
왜냐면 ASCII 코드라는 문자 인코딩 덕분에 01000001을 입력하면 'A'로 출력하게 만듭니다.
아래의 C언어 소스 코드를 참고해주세요.

char 자료형은 1바이트 자료형으로 8개의 비트로 1개의 문자를 표현할 수 있습니다.
예시로 char ch = 65;로 저장하고 %c로 문자를 출력하면 'A'가 출력됩니다.
그리고 만약 ch + 1이면 66이 되며 66과 인코딩된 문자는 'B'입니다.
그 외 ASCII 코드에 있는 문자들을 보고 싶다면 위키백과에 들어가서 확인해주세요.
다음으로 문자열(string)입니다.
문자열은 여러 개의 문자로 이루어진 자료형입니다.
C언어에서는 string이 따로 지원되지 않아 char 배열로 직접 구현해야 합니다.
예를 들어 "baekjoon"이라는 문자열을 구현할려면 어떻게 소스 코드를 구현해야 할까요?

C언어에서는 문자열을 구현할려면 char 배열을 사용해야 합니다.
그런데 잘 보시면 8개가 아닌 9개로 저장되어 있습니다.
그리고 '\0' (널 문자, Null Terminator)가 마지막에 저장되어 있다는 것을 알 수 있습니다.
컴퓨터에서 문자들을 읽다가 마지막에 널 문자를 만나면 "여기까지만 읽고 그만 읽어라"는 뜻입니다.
만약 널 문자를 추가하지 않으면 메모리 내부에서 널 문자를 만나기 전까지 계속 쓰레기 문자들을 출력하게 만듭니다.
하지만 걱정마십시오!
C++에서는 #include <string>을 통해 자동으로 문자열 출력하게 만들어주니 안심하셔도 됩니다!

이렇게 매우 간단하게 문자열을 출력할 수 있습니다.
그 다음으로 C++에서는 문자열도 인덱싱(indexing)이 가능합니다.
인덱싱은 배열 기초에서 "범위 안에 있는 index로 값을 읽어내는 것"을 의미합니다.
예시로 "baekjoon"에서 str[3]은 얼마일까요?
index는 0부터 시작하므로 "k"가 출력하게 됩니다.

이제부터 문자열의 인덱싱을 활용하여 백준 문제를 풀도록 하겠습니다.
문제 : 모음의 개수(10987번)(Bronze IV)
문제 링크 : https://www.acmicpc.net/problem/10987
출처 : Baekjoon Online Judge
이 문제의 문자열의 크기가 100 이하이므로 브루트 포스 알고리즘(모든 원소들을 다 탐색하는 알고리즘)으로 해결할 수 있습니다.
각 모음의 개수들을 int a, e, i, o, u로 각각 0으로 선언해서 만약 해당 문자가 일치하면 +1 합니다.
그 뒤 모든 모음의 개수들을 다 더하면 됩니다.
#include <bits/stdc++.h>
using namespace std;
int main() {
ios::sync_with_stdio(false);
cin.tie(nullptr);
string s;
cin >> s;
int a = 0;
int e = 0;
int i = 0;
int o = 0;
int u = 0;
int size = s.size();
// 이미 변수 i 사용해서 index로 대체
for(int index = 0; index < size; index++) {
if(s[index] == 'a') a++;
if(s[index] == 'e') e++;
if(s[index] == 'i') i++;
if(s[index] == 'o') o++;
if(s[index] == 'u') u++;
}
int result = a + e + i + o + u;
cout << result;
return 0;
}
여기서 크기를 측정할 때 문자열은 length() 혹은 size() 둘 다 사용할 수 있습니다.
하지만 훗날 나올 vector, map, set 등의 STL(Standard Template Library) 자료의 크기를 측정하기 위해 size()를 사용하고 문자열도 결국 C++에서 string은 문자들의 집합 컨테이너이므로 size()를 사용할 수 있습니다.
그러므로 저는 알고리즘 문제를 해결할 때 되도록 size()를 선호합니다.
추가로 Python에서는 if문에서 in 연산자를 통해 더 간단하게 구현할 수 있습니다.
import sys
input = sys.stdin.readline
s:str = input().rstrip()
result:int = 0
for i in range(len(s)) :
if s[i] in ['a', 'e', 'i', 'o', 'u'] :
result += 1
print(result)'(구) 알고리즘 기초(백준 알고리즘 태그) > 자료구조' 카테고리의 다른 글
| [자료구조 기초 - 연결 리스트(LinkedList)]백준 에디터(1406번) 풀이 (C++/Python) (0) | 2026.04.26 |
|---|---|
| [자료구조 기초 - 배열 리스트(ArrayList)]백준 제로(10773번) 풀이 (C++/Python) (0) | 2026.04.25 |
| [자료구조 기초 - 실수(Float)]백준 평균은 넘겠지(4344번) 풀이 (C++/Python) (0) | 2026.04.04 |
| [자료구조 기초 - 정수(Integer)]백준 사파리월드(2420번) 풀이 (C++/Python) (0) | 2026.02.17 |
| [자료구조 기초 - 배열(Array)]백준 개수 세기(10807번) 풀이 (C++) (0) | 2026.02.11 |