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 |
Tags
- git #unity #깃허브
- firebase #파이어베이스
- boj #baekjoon
- 백준 #c++
- flutter #git
- 유데미 #udemy #웅진씽크빅 #스나이퍼팩토리 #인사이드아웃 #미래내일일경험 #프로젝트캠프 #부트캠프 #react #리액트프로젝트 #프론트엔드개발자양성과정 #개발자교육과
- 비주얼스튜디오 #코드스니펫
- unity #2d-game
- boj #c++
- flutter #app #취준
- flutter #firebase #플러터 #파이어베이스 #연동
- VS #비주얼스튜디오
- #유데미 #udemy #웅진씽크빅 #스나이퍼팩토리 #인사이드아웃 #미래내일일경험 #프로젝트캠프 #부트캠프 #react #리액트프로젝트 #프론트엔드개발자양성과정 #개발자교육과정
- unity #2d-game #minigame #vscode
- 플러터 #flutter #restful #rest api
- flutter #플러터
- 로컬저장소 #이름변경
- flutter #todolist
- boj #baekjoon #c++
- 백준
- baekjoon #백준 #boj
- Flutter
- 비주얼 스튜디오 #vs #visual studio
- flutter #플러터 #분석
- flutter #상태관리
- flutter #깃
- 인턴 #프론트엔드 #개발자 #프론트엔드개발자 #취준
- 백준 #boj
- 백준 #boj #baekjoon
- baekjoon #boj #c++
Archives
- Today
- Total
cococo-coding
1157번. 단어 공부 본문
#include <stdio.h>
#include <string.h>
int main() {
//1. 단어를 입력받는다.
//2. 가장 많이 사용된 알파벳을 찾는다.
//3. 그 알파벳을 출력한다.
//1
char word[1000001];
scanf("%s", word);
int len=strlen(word);
//2 알파벳이 사용된 횟수만큼 배열을 생성한다.
int cnt[26]; //알파벳개수를 넣을 배열
int num; //0~25가 된 숫자를 넣을 변수
for(int i=0; i<len; i++){ //word길이만큼 for문을 돌려줌
//2-1 대문자인 경우
if('A'<=word[i] && 'Z'>=word[i]){
num=word[i]-'A';
}
//2-2 소문자인 경우
else if('a'<=word[i] && 'z'>=word[i]){
num=word[i]-'a';
}
cnt[num]++; //나온 값=배열 숫자 이므로 배열인덱스에 나온값을 넣어 바로 증가시켜줌
}
//3
int max=0;
int index=0;
for(int i=0; i<26; i++){
if(max<cnt[i]){ //여기서 cnt[i]< cnt[i+1]로 해서 계속 max가 z가 되는 상황이 발생... 주의...
max=cnt[i];
index=i;
}
}
//알파벳 중 같은 갯수로 max가 있는 경우
int check=0;
for(int i=0; i<26; i++){
if(max==cnt[i]) check++;
}
//check가 하나면 자기 자신만 있다는 것
//하나이상이면 같은 max로 겹치는 애가 있다는 것
if(check>1) {
printf("?");
}
else{
printf("%c\n", index+65);
}
return 0;
}
필요 개념
1. 알파벳 개수 세기
알파벳 개수를 넣을 배열을 생성하여 cnt[26];
입력받은 문자가 대문자인 경우와 소문자인 경우로 분류한다.
이 값들을 각각 A와 a만큼씩 빼주면 0~26사이의 숫자가 나온다.
이를 cnt[26]에 넣어주면 된다.
2. 같은 max값이 나온 경우 처리하기
check 변수를 생성하여 cnt배열에 한번 돌려준다.
예를 들어 i가 4번 나와 단독 max값인 경우)
max값이 4인데, A~Z까지 한번 돌린 경우에 check는 i 자기자신 한번만 더해지므로 1이 된다
반면 i와 다른 알파벳이 동일하게 4번 나온 경우)
check값은 i와 다른 알파벳까지 2번이 나오게 되므로 ?를 출력하게 된다.
느낀 점
값을 체크해야 할 경우 변수를 생성하여 그 값을 받아서 코드를 짜보자.
그리고 배열은 그 자체로 주소를 내포하고 있으므로 scanf에서 &를 쓰지 않는다.
아래코드는 중간중간에 printf로 결과를 출력하면서 진행한 코드이다.
혹시나 어디서 문제가 발생한지 찾아야한다면 이렇게 해도 좋을 것 같다.
#include <stdio.h>
#include <string.h>
int main() {
//1. 단어를 입력받는다.
//2. 가장 많이 사용된 알파벳을 찾는다.
//3. 그 알파벳을 출력한다.
//1
char word[1000001];
scanf("%s", word);
int len=strlen(word);
//2 알파벳이 사용된 횟수만큼 배열을 생성한다.
int cnt[26]; //알파벳개수를 넣을 배열
int num; //0~25가 된 숫자를 넣을 변수
for(int i=0; i<len; i++){ //word길이만큼 for문을 돌려줌
//2-1 대문자인 경우
if('A'<=word[i] && 'Z'>=word[i]){
num=word[i]-'A';
}
//2-2 소문자인 경우
else if('a'<=word[i] && 'z'>=word[i]){
num=word[i]-'a';
}
cnt[num]++; //나온 값=배열 숫자 이므로 배열인덱스에 나온값을 넣어 바로 증가시켜줌
}
//가장 많이 사용된 알파벳을 배열에서 찾는다
/*for(int i=0; i<26; i++){
printf("%d ", cnt[i]);
}
printf("\n");
*/
//3
int max=0;
int index=0;
for(int i=0; i<26; i++){
if(max<cnt[i]){ //여기서 cnt[i]< cnt[i+1]로 해서 계속 max가 z가 되는 상황이 발생... 주의...
max=cnt[i];
index=i;
}
}
//알파벳 중 같은 갯수로 max가 있는 경우
int check=0;
for(int i=0; i<26; i++){
if(max==cnt[i]) check++;
}
//check가 하나면 자기 자신만 있다는 것
//하나이상이면 같은 max로 겹치는 애가 있다는 것
if(check>1) {
printf("?");
}
else{
printf("%c\n", index+65);
}
return 0;
}
/*
아래와 같이 쓰지말것. 배열은 주소의 의미를 내포하고 있어 &word로 쓰지않는다.
scanf("%s", &word);
*/
'[BOJ] 코드 모음 > C_baekJoon' 카테고리의 다른 글
1978번. 소수 찾기 (1) | 2023.11.26 |
---|---|
10250번. ACM 호텔 (1) | 2023.11.23 |
2920번. 음계 (1) | 2023.11.22 |
8958번. OX퀴즈 (2) | 2023.11.22 |
2475번. 검증수 (0) | 2023.11.21 |