문제링크 : https://www.acmicpc.net/problem/1157
문제풀이
① A부터 Z까지 길이가 26인 배열을 만든다.
② 입력받은 문자열을 모두 대문자로 변환한다.
③ 아스키 문자표에서 A는 65에 해당한다.
따라서 입력받은 문자 하나씩 차례로 65를 빼 인덱스로 사용한다.
④ 위에서 구한 인덱스에 해당하는 값을 증가시킨다.
예) Mississipi

⑤ 위 배열을 차례로 돌면서 가장 큰 값을 가지고 있는 인덱스를 구한다.
⑥ 가장 큰 값이 중복으로 나오면 인덱스를 -1로 저장한다.
⑦ 인덱스가 -1이면 '?'를, -1이 아니면 그에 해당하는 문자를 출력한다.
소스코드
/* * 백준 1157번: 단어 공부 */ #include <iostream> #include <string> using namespace std; int main() { string word; getline(cin, word); int arr[26] = {0, }; for (int i = 0; i < word.length(); i++) { int idx = toupper(word[i]) - 65; arr[idx]++; } int max = 0; int index = 0; for (int i = 0; i < 26; i++) { if (max < arr[i]) { max = arr[i]; index = i; } else if (max == arr[i]) { index = -1; } } char result = index == -1 ? '?' : index + 65; cout << result; return 0; }
'Algorithm > 문제풀이' 카테고리의 다른 글
[백준] 6064번: 카잉 달력 (0) | 2019.05.22 |
---|---|
[백준] 1475번: 방 번호 (0) | 2019.05.21 |
[백준] 1924번: 2007년 (0) | 2019.05.19 |
[백준] 2775번: 부녀회장이 될테야 (0) | 2019.05.19 |
[백준] 10250번: ACM 호텔 (0) | 2019.05.18 |