https://www.acmicpc.net/problem/1157
입력받은 알파벳 문자열에서 대소문자 상관없이 가장 많이 나온 문자를 찾는 문제.
문제를 풀기위해 아스키코드로 접근하였다. 먼저 아스키 코드값을 알아보자.
#include <stdio.h>
int main(){
printf("%d\n%d", 'A' , 'a');
}
A의 아스키코드는 65이고 a의 아스키코드는 97로 나온다. 따라서 A~Z의 아스키코드는 65~90이고, a~z의 아스키코드는 97~122임을 알 수 있다.
이를 이용하여 다음과 같이 풀이하였다.
#include <stdio.h>
int main () {
int alpha[26] = {0,}; // 입력받은 문자열에 있는 알파벳의 개수
int ascii, idx = 0, temp = -1, max = 0, loc; // 아스키코드, 반복인자, 최댓값의 개수, 많이 나온 알파벳의 위치
char input[1000001]; // 입력받을 문자열
scanf("%s", input);
while (input[idx] != '\0') { // 알파벳이 나온 횟수를 기록
ascii = input[idx]; // 알파벳의 아스키코드 저장
ascii = ascii <= 90 ? ascii - 65 : ascii - 97; // 대소문자에 따라 식을 다르게 조작
alpha[ascii]++; // 해당하는 위치의 요소를 1 더한다.
idx++;
}
for (int i = 0; i < 26; i++) {
if (temp < alpha[i]) { // 최댓값이 발견되면
temp = alpha[i]; // 바꾸고
loc = i; // 위치를 기록한 후에
max = 0; // 같은 개수의 것들을 초기화
} else if (temp == alpha[i] && alpha[i] != 0) { // 같은 개수인 경우
max++; // 1 더한다
}
}
if (max == 0) { // 출력
printf("%c", loc + 65); // 대문자로 출력하기 위해 아스키코드를 조작한다
} else {
printf("?"); // max가 0이 아니라는 건 중복되는게 있다는 뜻
}
return 0;
}
'coding_test > BAEKJOON' 카테고리의 다른 글
백준 2908번 C언어 풀이 (0) | 2021.08.12 |
---|---|
백준 1152번 C언어 풀이 (0) | 2021.08.11 |
백준 2675번 C언어 풀이 (0) | 2021.08.10 |
백준 10809번 C언어 풀이 (0) | 2021.08.07 |
백준 1065번 C언어 풀이 (0) | 2021.08.06 |