Notice
Recent Posts
Recent Comments
Link
승코딩당당당
[C++] 백준 1157: 단어 공부 본문
문제
[C++] 백준 1157: 단어 공부 BRONZE 1
https://www.acmicpc.net/problem/1157

접근 방법
이 문제는 단어가 주어졌을 때 가장 많이 사용된 알파벳을 출력하는 문제이다.
대소문자는 구분하지 않으므로 먼저 모든 문자를 대문자로 통일한다.
각 문자를 하나씩 확인하면서,
해당 문자의 아스키 코드 값을 인덱스로 사용해 배열에 등장 횟수를 저장한다.
- 문자 'A', 'B', 'C' … 는 내부적으로 각각 고유한 아스키 코드 값을 가지므로
- 문자 자체를 int로 변환해 배열의 인덱스로 사용하면 알파벳별 등장 횟수를 쉽게 관리할 수 있다.
이후 배열을 순회하며 가장 큰 빈도를 가진 인덱스를 찾고,
해당 빈도가 유일한지 여부를 확인한다.
- 최댓값이 하나뿐이면 → 해당 인덱스를 다시 문자로 변환해 출력
- 최댓값이 여러 개면 → ? 출력
구현 시 주의할 점
- 대소문자를 구분하지 않으므로 toupper()를 사용해 모든 문자를 대문자로 변환한 뒤 처리해야 한다.
- (소문자 변환은 tolower())
코드
#include <iostream>
#include <cctype>
#include <string>
using namespace std;
int main()
{
ios::sync_with_stdio(false);
cin.tie(NULL);
cout.tie(NULL);
string word = "";
cin >> word;
int arr[100] = { 0, };
for (int i = 0; i < word.size(); i++)
{
word[i] = toupper(word[i]); // 모든 문자 대문자로 변경
arr[(int)word[i]]++;
}
int Max = -1, index = 0;
for (int i = 0; i < 100; i++)
{
if (arr[i] > Max)
{
Max = arr[i];
index = i;
}
}
bool flag = false; // 가장 많이 사용된 알파벳이 여러 개인 경우
for (int i = index + 1; i < 100; i++)
{
if (arr[i] == Max)
{
flag = true;
break;
}
}
if (flag == true)
cout << '?';
else
cout << (char)index;
return 0;
}'PS > BOJ' 카테고리의 다른 글
| [C++] 백준 11723: 집합 (1) | 2025.12.30 |
|---|---|
| [C++] 백준 2816: 디지털 티비 (1) | 2025.12.29 |
| [C++] 백준 1927: 최소 힙 (0) | 2025.12.29 |
| [C++] 백준 2292: 벌집 (2) | 2025.12.29 |
| [C++] 백준 5073: 삼각형과 세 변 (0) | 2025.12.28 |