Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
Tags
- 일상생활 영어표현
- 백준 2587번
- 알고리즘
- 백준 2525번
- html
- javascript
- 백준 25305번
- Java
- Unity
- 잡다한 일
- 피라미드 출력
- 백준 5597번
- 상세 풀이
- 백준 5086번
- C
- 대칭 차집합
- 배열
- 5073번
- 직각 삼각형
- 연속된 숫자의 합
- 백준 9506번
- 백준 27433번
- 해석
- C++
- 논리 연산
- 백준 1269번
- 백준 #11382번 #
- 백준 1157번
- 백준 2501번
- 차이
Archives
- Today
- Total
YunDev
[C]백준 1157번 - 풀이 본문
https://www.acmicpc.net/problem/1157
#include <stdio.h>
#include <string.h>
#include <ctype.h> // toupper 함수 사용을 위해
int main() {
char str[1000000] = "";
int frequency[26] = {0}; // 알파벳 빈도를 저장할 배열
int maxFrequency = 0; // 가장 높은 빈도
char maxChar; // 가장 많이 사용된 알파벳
scanf("%s", str);
int len = strlen(str);
for (int i = 0; i < len; i++) {
char ch = toupper(str[i]);
if (ch >= 'A' && ch <= 'Z') {
int index = ch - 'A';
frequency[index]++;
if (frequency[index] > maxFrequency) {
maxFrequency = frequency[index];
}
}
}
int countMaxChar = 0;
char maxChar = '?';
for (int i = 0; i < 26; i++) {
if (frequency[i] == maxFrequency) {
countMaxChar++;
if (countMaxChar > 1) {
maxChar = '?';
break;
}
maxChar = 'A' + i;
}
}
printf("%c\n", maxChar);
return 0;
}
- 풀이 : 대소문자를 구분하지 않고, 각 알파벳의 빈도를 세어서 가장 많이 나타난 알파벳을 찾기 위해서
26개의 요소를 가진 배열을 초기화하고, 문자열을 입력받았을 때 문자의 수만큼 반복문을 돌면서 대문자로 변환 후 해당 알파벳의 빈도수를 증가시킵니다. 따라서 maxFrequency는 현재 최대 빈도수를 가지고 있습니다.
그 다음, 만약 최대 빈도수를 가진 알파벳이 여러개라면 "?"를 출력해야 하기 때문에 다시 반복문을 돌며 모든 알파벳의 빈도를 다시 확인하여(frequency[i] == maxFrequency) 가장 높은 빈도를 가진 알파벳의 개수를 세고 만약 여러 개라면 "?"를 출력하게 만듭니다.
최대빈도수를 가진 알파벳이 하나라면 그 알파벳이 출력되겠죠.
'Programming > Baekjoon Program' 카테고리의 다른 글
백준 2480번[C] - 상세 풀이 (2) | 2024.01.10 |
---|---|
백준 2525번[C] - 상세 풀이 (0) | 2024.01.09 |
백준 11382번[C] - 풀이 (3) | 2024.01.04 |
백준 10988번[C] - 상세 풀이 (1) | 2024.01.04 |
백준 10817번 (java) (0) | 2020.05.07 |