목차
백준 단계별로 풀어보기
25.08.20
6단계: 심화 1
1157번: 단어 공부
문제 링크 : https://www.acmicpc.net/problem/1157
문제 풀이
>> 문제를 풀기 위해 알아야 할 개념
- 소문자를 모두 대문자로 변환해주는 함수
: string 클래스에서 제공해주는 함수로, 'ToUpper()'를 사용하면 소문자를 모두 대문자로 변환해준다.
※ 반대로 대문자를 모두 소문자로 변환해주는 함수는 'ToLower()'이다.
>> 풀이
- 가장 많이 사용한 알파벳을 출력할 때 대문자로 호출하기 때문에 입력을 받아서 소문자를 모두 대문자로 변환해준다.
- 문자열을 문자의 배열(characters)로 받는다.
- 알파벳 A부터 Z까지 개수를 담아줄 정수 배열(counts)을 만든다. --> 따라서 배열의 크기도 알파벳 개수인 26으로 설정한다.
- foreach문으로 characters를 돌면서 해당하는 알파벳에 따라 정수 배열의 숫자를 늘려준다.
- 문자 또한 정수값이므로, ASKII Code에 따라 해당하는 알파벳에서 'A' 값을 빼주면 0~26의 값으로 나오기 때문에 이를 index 번호로 활용할 수 있다.
- for문으로 정수 배열을 돌면서 가장 count가 높은 값을 maxCount에 담고, 그때의 index를 캐싱한다.
- 다시 한번 for문으로 정수 배열을 돌면서 maxCount와 count가 같은 값이 있는지 찾는다.
- 기존에 찾은 index번호와 같을 때는 넘어갈 수 있도록 해야한다.
- 같은 값이 있다면 "?"를 반환하고 종료, 같은 값이 없다면 찾아놓은 index에 다시 'A'만큼 더해서 char로 변환하여 출력한다.
정답 코드
class Backjoon
{
static void Main(string[] args)
{
string input = Console.ReadLine();
string upperInput = input.ToUpper();
char[] characters = upperInput.ToCharArray();
int[] counts = new int[26];
int maxCount = 0;
int index = -1;
foreach (char c in characters)
{
counts[c - 'A']++;
}
for (int i = 0; i < counts.Length; i++)
{
if (counts[i] > maxCount)
{
maxCount = counts[i];
index = i;
}
}
for (int i = 0; i < counts.Length; i++)
{
if (i != index && counts[i] == maxCount)
{
Console.Write('?');
return;
}
}
Console.Write((char)(index + 'A'));
}
}'Development > Baekjoon' 카테고리의 다른 글
| [C#] 1316번: 그룹 단어 체커 (0) | 2025.08.25 |
|---|---|
| [C#] 2941번: 크로아티아 알파벳 (0) | 2025.08.21 |
| [C#] 10988번: 팰린드롬인지 확인하기 (0) | 2025.08.19 |
| [C#] 2444번: 별 찍기 - 7 (0) | 2025.08.18 |
| [C#] 3003번: 킹, 퀸, 룩, 비숍, 나이트, 폰 (1) | 2025.08.18 |