코딩 테스트/백준

백준 - [단계별로 풀어보기 심화 1] 1157 단어 공부

devrabbit22 2026. 3. 16. 19:22

이번 문제는 대문자와 소문자의 구분이 없기 때문에 입력받은 문자열을 대문자로 변환한 후 각 알파벳의 인덱스를 이용해 등장 횟수를 계산하는 방식으로 접근했다.

알파벳은 총 26개이므로 int[26] 배열을 생성하고, 각 문자를 c - 'A' 연산을 통해 0~25 범위의 인덱스로 변환하여 해당 알파벳의 등장 횟수를 카운트했다.

이후 배열에서 가장 큰 값을 찾은 뒤, 그 값과 같은 등장 횟수를 가진 알파벳이 몇 개인지 확인했다.

만약 최대값을 가진 알파벳이 여러 개라면 ?를 출력하고, 하나만 존재한다면 인덱스를 다시 문자로 변환하여 결과를 출력하도록 구현했다.

//백준 1157 단어 공부
string inputData = Console.ReadLine().ToUpper();    //소문자 대문자로 변환
int[] arr = new int[26];    //알파벳 배열
int count = 0;
int index = 0;

//알파벳 등장 횟수 카운트
foreach(char c in inputData)
{
    arr[c - 'A']++; //문자를 배열 인덱스로 변환해서 카운트
}
// 배열에서 가장 큰 값(가장 많이 등장한 알파벳의 개수) 찾기
int max = arr.Max();

//최대 값과 같은 알파벳이 몇개인지 확인
for(int i = 0; i< 26; i++)
{
    if (arr[i] == max)
    {
        count++;    //최대 값을 가진 알파벳 개수 증가
        index = i;  //해당 알파벳의 인덱스 저장
    }
}

//최대값을 가진 알파벳의 수가 2개 이상인 경우 ? 출력
if (count > 1)
{
    Console.WriteLine("?");
}
else
    Console.WriteLine((char)(index + 'A'));      // 인덱스를 다시 문자로 변환하여 출력 (index = 0 -> 'A', index = 1 -> 'B') index(0~25) + 'A'(65)
                                                 //ex) index = 0 -> 0 + 65 = 65 → 'A'

출력 결과 1
출력 결과 2