[ baekjoon ] #1283 단축키 지정

eunheelog·2024년 12월 15일
0

baekjoon

목록 보기
21/21

백준 #1283 단축키 지정

문제 요약


[ 단축키 지정 방법 ]
1. 하나의 옵션에 대해 왼쪽 → 오른쪽 순서로 단어의 첫 글자가 이미 단축키로 지정되었는지 확인 단축키로 지정되어있지 않은 경우 단축키로 지정
2. 만약 모든 단어의 첫 글자가 이미 지정 되어있다면 왼쪽에서 차례대로 알파벳을 보면서 단축키로 안 된 것 단축키로 지정
3. 단축키로 지정할 수 있는 것이 없을 경우 그냥 놔둔다. (대소문자 구분 X)
4. 위의 규칙을 첫 번째 옵션부터 N번째 옵션까지 차례대로 적용

💡Idea

  1. 단축키로 지정할 경우 map 에 저장하고 존재하는지 찾자 !
    → 없는 경우 map 에 추가
  2. 모든 단어의 첫 글자를 " " 위치 + 1 한 위치로 찾기
    → 모든 단어의 첫 글자가 단축키로 지정돼있을 경우 하나씩 비교하면서 찾기
    이때, 알파벳인지 확인해야함 !!!
  3. 대소문자 구분하지 않고 단축키로 설정하기 때문에 모두 소문자로 바꿔서 비교 (tolower 사용)
  4. 단축키로 지정할 수 있을 경우 [문자] 형식으로 바꾸기
    → +, append 사용

[ SourceCode ]

#include <iostream>
#include <string>
#include <map>
using namespace std;

int main() {
    int N;
    cin >> N;
   
    cin.ignore();

    map <char, int> list;

    for(int i=0; i<N; i++) {
        string option;
        getline(cin, option);
      
        int idx = 0;
        int check = 0;
        while(!check) {
            if(list.find(tolower(option[idx])) == list.end()) {
                list.insert(make_pair(tolower(option[idx]), 1));
                string str = "[";
                str += option[idx];
                option.replace(idx, 1, str.append("]"));
                check = 1;
            }
            // 다음 단어 위치 찾기
            idx = option.find(" ", idx);
            if(idx == string::npos) break;
            idx++;
        }

        if(!check) {
            for(int j=0; j<option.length(); j++) {
                if(option[j] == ' ') continue;
                if(list.find(tolower(option[j])) == list.end()) {
                    list.insert(make_pair(tolower(option[j]), 1));
                    string str = "[";
                    str += option[j];
                    option.replace(j, 1, str.append("]"));
                    break;
                }
            }
        }

        cout << option << "\n";

    }
    return 0;
}

Feedback


  1. 단어의 첫 글자가 단축키로 지정돼있을 경우 왼쪽부터 하나씩 비교하는데 알파벳인지 확인하지 않았음,,
  2. 1번의 문제를 해결하고 나서도 계속 틀렸는데 입력 버퍼 문제를 생각하지 못했다 ㅠㅠ
  3. +연산자나 append를 사용해서 [문자] 형식으로 바꿨는데 이 방법 말고 insert를 사용하거나 string 함수를 사용하는 것이 깔끔한 것 같다 !

[ UpgradeCode ]

// insert 사용
option.insert(idx, "[");
option.insert(idx + 2, "]");

// string 사용
string keyword = "[" + string(1, option[idx]) + "]";
option.replace(idx, 1, keyword);

Remind


  • cin 과 getline을 같이 사용하는 경우 입력 버퍼에 개행 문자가 남아있을 수 있으므로 cin.ignore()를 통해 입력 버퍼 비워주기 !
profile
⛧1일 1알고리즘⛧

0개의 댓글