<알고리즘 문제풀이&연습>/[C++] 백준

[백준 1157] 단어 공부 (map)

사용자 BlockDMask 2017. 7. 29. 01:33
반응형

  • 안녕하세요 BlockDMask 입니다.

  • 문자와 아스키 코드를 이용하는 문제입니다.

  • 최근 공부중인 STL을 사용해보았습니다.

0) 제목

  • BOJ 백준 1157번 "단어 공부" 문제입니다.

  • C++ 을 이용하여 풀었습니다.

1) 문제설명


알파벳이 대소문자 구분없이 쭉~~~! 주어지면

그중, 가장 많이 쓰인 알파벳이 무엇인지 알아내는 문제.

단, 대소문자 구분 없음.

가장 많이 쓰인 알파벳을 대문자로 출력.

만약 가장 많이 쓰인 알파벳이 여러개 라면 "?" 출력.


2) 풀이과정


STL에서 container를 요즘 공부하고있기 때문에, 이 문제를 보자마자
알파벳 및 횟수를 map의  <key, value> 로 만들면 되겠다라는 생각이 들었습니다.


map을 이용하여 알파벳, 횟수를 map<char, int>로 묶었습니다.

대문자를 출력하기 위해서 소문자가 들어왔을때, 아스키 코드상의 관계를 이용하여 대문자로 인식하도록 했습니다.

처음 들어온 알파벳인지 이미 있는 알파벳인지를 구분하여 횟수를 셈하도록 하였습니다.

가장 큰 횟수를 찾고

다른 알파벳의 횟수가 동일한 것이 존재하는지 검사하도록하였습니다.


3) 함수설명


주석 적어두었습니다.


4) 코드


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
43
44
45
46
47
48
49
50
51
52
53
54
55
#include<iostream>
#include<map>
#include<string>
 
using namespace std;
 
int main(void){
 
    map<charint> m;
    string str;
 
    cin >> str;
 
    char key;
    map<charint>::iterator iter;
 
    //문자열을 받습니다.
    //소문자 인 경우에는 아스키 코드 상의 관계를 이용하여
    //대문자로 바꾸어서 map에 삽입해줍니다.
    for(int i=0; i< str.size() ; i++){
        if( str[i] >= 'a'){
            str[i] -= ('a' - 'A');
        }
 
        //기존에 존재 하는 값인지 검사.
        iter = m.find(str[i]);
        
        if(iter != m.end()){        //존재할때
            m[iter->first] +=1;
        }else{                      //존재하지 않을때
            m[str[i]] = 1;
        }
 
    }
 
    //횟수가 가장 많은 값을 가리키는 반복자를 찾습니다
    map<charint>::iterator max_iter = m.begin();
    iter = m.begin()++;
    for( ; iter != m.end() ; iter++){
        if(max_iter->second < iter->second){
            max_iter = iter;
        }
    }
 
    //max인 횟수와 같은 횟수가 존재하고, 그 인자의 key가 동일한지 검사합니다.
    for(iter = m.begin() ; iter != m.end() ; iter++){
        if(max_iter->second == iter->second && max_iter->first != iter->first){
            cout << "?";
            return 0;
        }
    }
    cout << max_iter->first ;
 
    return 0;
}
cs


5) 인증

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


STL의 associative container  

map 에 대한 예제. 

읽어주셔서감사합니다.

반응형