#info
카테고리 : 단계별로 풀어보기 - 문자열 파트
난이도 : BRONZE1
사용언어 : C언어/C++
메모리 : 1980KB
시간 : 16ms
#소스코드
/* omyo(yomo) develop */
/* blog : https://omyodevelop.tistory.com */
#include <stdio.h>
#include <ctype.h>
#define LEN 1000001
int main(void){
// <1> [INPUT] 문자열 입력 & 알파벳 배열 초기화
char str[LEN];
int alphaArr[26] = {0,};
scanf("%s",&str);
// <2> 소문자 → 대문자 변경
for (int i = 0; str[i]; i++) {
if(islower(str[i])) str[i] = toupper(str[i]);
}
// <3> 알파벳 개수 체크
for(int i=0; str[i]!=NULL; i++){
alphaArr[str[i]-65] ++;
}
// <4> 가장 많이 나온 알파벳 계산
int MAX = 0;
int index_MAX = 0;
for(int j=0; j<26; j++){
if(MAX < alphaArr[j]){
MAX = alphaArr[j];
index_MAX = j;
}
else if(MAX==alphaArr[j] && alphaArr!=0){
index_MAX = -1;
}
}
// <5> [OUTPUT]
if(index_MAX != -1){
printf("%c", 65+index_MAX);
}
else{
printf("?\n");
}
return 0;
}
#풀이
알아보기 쉽게 소스코드를 5가지 구역으로 나누었습니다.
// <1> [INPUT] 문자열 입력 & 알파벳 배열 초기화
char str[LEN];
int alphaArr[26] = {0,};
scanf("%s",&str);
char형 배열을 통해 문자열을 입력받고, 길이가 26인 int형 alphaArr 배열을 선언과 동시에 모든 인덱스를 0으로 초기화합니다.
// <2> 소문자 → 대문자 변경
for (int i = 0; str[i]; i++) {
if(islower(str[i])) str[i] = toupper(str[i]);
}
islower 함수와 toupper 함수를 이용해, 입력받은 문자열을 모두 대문자로 바꾸어 줍니다.
처음에는 strupr 함수를 써서 대문자로 바꾸었는데, 백준 환경에서 돌려보니 컴파일 에러가 났습니다.
구글에 검색해 보니, strupr 함수는 표준함수가 아닌 비쥬얼 환경에서만 돌아가는 함수라서 LINUX 기반으로 채점을 진행하는 백준에서는 컴파일 에러가 발생한다고 하네요.
// <3> 알파벳 개수 체크
for(int i=0; str[i]!=NULL; i++){
alphaArr[str[i]-65] ++;
}
for 반복문을 이용해 입력받은 문자열을 NULL문자를 만날 때 까지 돌려서 각 알파벳이 총 몇개가 있는 지 alphaArr에 저장합니다.
// <4> 가장 많이 나온 알파벳 계산
int MAX = 0;
int index_MAX = 0;
for(int j=0; j<26; j++){
if(MAX < alphaArr[j]){
MAX = alphaArr[j];
index_MAX = j;
}
else if(MAX==alphaArr[j] && alphaArr!=0){
index_MAX = -1;
}
}
알파벳의 개수가 저장된 alphaArr 배열을 for문으로 돌려 빈도수가 가장 높은 알파벳을 계산합니다.
// <5> [OUTPUT]
if(index_MAX != -1){
printf("%c", 65+index_MAX);
}
else{
printf("?\n");
}
마지막으로 출력 부분입니다.
대문자 A가 아스키로 65인것을 고려하여, 문제가 제시한 조건에 맞게 출력합니다.
#문제
'Programming > PS' 카테고리의 다른 글
[백준/BOJ] C언어/C++ 1152번 단어의 개수 문제풀이 (0) | 2021.02.24 |
---|---|
[백준/BOJ] C언어 2675번 문자열 반복 (0) | 2021.02.21 |
[BOJ] C/C++ 1912 "연속합" (0) | 2020.12.28 |
[BOJ] C/C++ 11055 "가장 큰 증가 부분수열" 소스코드/풀이 (0) | 2020.12.28 |
[BOJ] C/C++ 11053 "가장 긴 증가하는 부분수열" (0) | 2020.12.28 |
댓글