티스토리 뷰

PS 이야기/PS - BOJ

[BOJ] 1157번 - 단어 공부

whatisyourname 2022. 4. 1. 00:50
반응형

https://www.acmicpc.net/problem/1157

 

1157번: 단어 공부

알파벳 대소문자로 된 단어가 주어지면, 이 단어에서 가장 많이 사용된 알파벳이 무엇인지 알아내는 프로그램을 작성하시오. 단, 대문자와 소문자를 구분하지 않는다.

www.acmicpc.net

문제

알파벳 대소문자로 된 단어가 주어지면, 이 단어에서 가장 많이 사용된 알파벳이 무엇인지 알아내는 프로그램을 작성하시오. 단, 대문자와 소문자를 구분하지 않는다.

입력

첫째 줄에 알파벳 대소문자로 이루어진 단어가 주어진다. 주어지는 단어의 길이는 1,000,000을 넘지 않는다.

출력

첫째 줄에 이 단어에서 가장 많이 사용된 알파벳을 대문자로 출력한다. 단, 가장 많이 사용된 알파벳이 여러 개 존재하는 경우에는 ?를 출력한다.


1. 어떻게 풀까?

1-1) 단어를 하나하나씩 세보자.

먼저, 각 단어에 해당하는 크기 26짜리 (A~Z) 배열을 만든 후, 입력으로 주어진 단어 하나하나 살펴보아 알맞은 위치에 넣어보자. string형에서 for문을 이용하여 하나하나씩 열거하였다.

이후, 26짜리 배열을 하나씩 탐색하면서 단어의 최대 개수를 찾고, 만약 겹치는 것이 있다면 물음표가 출력되게 설정해주면 된다.

사실 쉬운 문제라 설명할 것이 없는 문제이다 ㅎㅎ...

 

2) 최종 코드

 

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
32
33
34
35
36
37
38
39
40
41
42
#include <bits/stdc++.h>
using namespace std;
 
int table[26= {0, };
 
int main() {
    ios_base::sync_with_stdio(false);
    cin.tie(NULL);
    cout.tie(NULL);
 
    string word; cin >> word;
    int idx = 0;
    
    for (char ch: word) {
        if (ch >= 'a') {
            table[ch-'a']++;
        } else {
            table[ch-'A']++;
        }
    }
    
    int result = -1;
    bool same = false;
 
    for (int i = 0; i < 26; i++){
        if (result < table[i]) {
            result = table[i];
            idx = i;
            same = false;
        } else if (result == table[i]) {
            same = true;
        }
    }
 
    if (same) {
        cout << "?";
    } else {
        cout << char(idx + 65);
    }
 
    return 0;
}
cs

 

반응형

'PS 이야기 > PS - BOJ' 카테고리의 다른 글

[BOJ] 1546번 - 평균  (0) 2022.04.01
[BOJ] 1330번 - 두 수 비교하기  (0) 2022.04.01
[BOJ] 1152번 - 단어의 개수  (0) 2022.03.31
[BOJ] 1008번 - A/B  (0) 2022.03.31
[BOJ] 1002번 - 터렛  (0) 2022.03.31
댓글
Total
Today
Yesterday
공지사항
최근에 올라온 글
최근에 달린 댓글
링크
«   2024/05   »
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
글 보관함