티스토리 뷰
반응형
https://www.acmicpc.net/problem/1157
1157번: 단어 공부
알파벳 대소문자로 된 단어가 주어지면, 이 단어에서 가장 많이 사용된 알파벳이 무엇인지 알아내는 프로그램을 작성하시오. 단, 대문자와 소문자를 구분하지 않는다.
www.acmicpc.net
⊙ 문제
⊙ 입력
⊙ 출력
⊙ 예제 입출력
⊙ 알고리즘 분류
- 구현
- 문자열
⊙ 문제 접근 과정
소문자 알파벳과 대문자 알파벳의 차이는 32
A와 Z의 차이는 25
A = '65', Z = '90'
a = '97', z = '122'
이 문제의 해결 포인트! 빈도수를 저장하는 배열 alpha를 만들어줬다.
그리고 해당 알파벳의 빈도수를 0부터 25의 공간에 저장해줬다.
왜냐하면 A와 Z의 차이는 25이기 때문이다.
그리고 빈도를 저장한 alpha에 대해 가장 자주 나온 index와 해당 알파벳을 찾고 저장해준다.
마지막으로 해당 알파벳이 유일한 최다 빈도수인지 아닌지 확인해주고
유일한 최다 빈도수라면 아스키코드를 통해 출력, 아니라면 ?를 출력해줬다.
코드 주석에도 자세히 적어놨다.
⊙ 문제 풀이
#include <iostream>
using namespace std;
int alpha[26], cnt =0;
string input;
//아스키코드 : 대문자 65~90, 소문자 97~122
int main() {
cin >> input;
//빈도수 체킹
for(int i=0;i<input.length();i++) {
if(input[i]<97) alpha[input[i] - 65]++; //대문자
else alpha[input[i] - 97]++; //소문자
}
int max = 0, max_indx=0;
for(int i=0;i<26;i++) {
if(max<alpha[i]) {
max=alpha[i];
max_indx = i;
}
}
//가장 많이 사용된 알파벳이 여러개인가?
for(int i=0;i<26;i++) {
if(max==alpha[i]) cnt++;
}
//여러개라면 ? 출력, 아니라면 대문자로 출력
if(cnt>1) cout << "?";
else cout << (char)(max_indx+65);
}
⊙ 결과
⊙ 마무리
NONE
좋아요는 로그인하지 않아도 누를 수 있습니다!
728x90
반응형
'백준 온라인 저지 [BOJ] > C++ [CPP]' 카테고리의 다른 글
[백준(BOJ)] 15657번 : N과 M (8) - C++[CPP] (0) | 2021.08.14 |
---|---|
[백준(BOJ)] 15656번 : N과 M (7) - C++[CPP] (0) | 2021.08.13 |
[백준(BOJ)] 2908번 : 상수 - C++[CPP] (0) | 2021.08.12 |
[백준(BOJ)] 2523번 : 별 찍기 - 13 - C++[CPP] (0) | 2021.08.12 |
[백준(BOJ)] 15655번 : N과 M (6) - C++[CPP] (0) | 2021.08.12 |
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- BFS
- 자바스크립트
- 쉽게배우는
- 구현
- Web
- 쉽게배우는자바프로그래밍
- 우종정
- Python
- 쉽게 배우는 자바 프로그래밍
- 그리디
- 정답
- 알고리즘
- 답
- CPP
- 문자열
- 정리
- 연습문제
- JS
- OS
- 정렬
- C++
- 풀이
- 자바
- 백준
- 해답
- py
- 프로그래머스
- java
- 파이썬
- 운영체제
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
글 보관함