본문 바로가기

Algorithm/자료구조

(C++) - 백준(BOJ) 2204번 : 도비의 난독증 테스트

반응형

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

 

2204번: 도비의 난독증 테스트

꿍은 도비에게 영어단어들을 제시한 후 어떤 단어가 대소문자를 구분하지 않고 사전순으로 가장 앞서는지 맞추면 양말을 주어 자유를 얻게해준다고 하였다. 하지만 인성이 좋지 않은 꿍은 사실

www.acmicpc.net

자료구조 map을 이용해 해결했습니다.

 

 

📕 풀이방법

📔 입력 및 초기화

원본 문자열을 저장할 vector 변수 v, map변수 m에는 모두 소문자로만든 문자열이 key, 그 문자열의 원본문자열이 저장되어있는 v의 index를 저장했습니다.

 

📔 풀이과정

 1. v를 저장할 때마다 해당 문자열을 모두 소문자로 바꾸고 그 인덱스를 m에 저장해줍니다. 2. map에 삽입시 자동 사전순으로 key가 저장되므로 map의 가장 첫 번째 원소.second에 해당하는 v를 출력하면됩니다.

 

📔 정답출력

 v[map.begin()->second] 출력


📕 Code

#include <bits/stdc++.h>
using namespace std;
int n;
vector <string> v(1001);
map <string,int> m;

int main(){
    while(1){
        cin >> n;
        if(!n) break;
        v.clear(), m.clear();
        for(int i = 0; i < n; i++) {
            cin >> v[i];
            string tmp;
            for(int j = 0; j < v[i].size(); j++){
                if('A' <= v[i][j] && v[i][j] <= 'Z') tmp += v[i][j] -'A' +'a';
                else tmp += v[i][j];
            }
            m[tmp] = i;
        }
        cout << v[m.begin() -> second] << '\n';
    }
}