์ƒ์„ธ ์ปจํ…์ธ 

๋ณธ๋ฌธ ์ œ๋ชฉ

[๋ฐฑ์ค€(BOJ)] 1283: ๋‹จ์ถ•ํ‚ค ์ง€์ • (C++)

PROGRAMMING/Algorithm

by koharin 2025. 3. 10. 23:45

๋ณธ๋ฌธ

728x90
๋ฐ˜์‘ํ˜•

๐Ÿค” ๊ณต๋ฐฑ์„ ํฌํ•จํ•œ ๋ฌธ์ž์—ด ์ฒ˜๋ฆฌ

getline(cin >> ws, v[i]);

C++ Reference์˜ getline ๋ฌธ์„œ๋ฅผ ์ฐธ๊ณ ํ•˜์—ฌ ๊ณต๋ฐฑ๋„ ์ €์žฅ๋˜๋„๋ก ์ฒ˜๋ฆฌํ•จ

 

๐Ÿค” ํ•œ ๋ฌธ์žฅ์— ๋Œ€ํ•œ ๋ฌธ์ž์—ด ์ €์žฅ

for(int i=0; i<N; i++){
	// splice with whitespace        
	istringstream input;
	input.str(v[i]);
	for(string s; getline(input,s,input.widen(' '));) current[i].push_back(s);
}

๊ฐ ๋‹จ์–ด์— ๋Œ€ํ•œ ์ฒซ ๋ฌธ์ž๋ฅผ ์‹๋ณ„ํ•˜๊ธฐ ์œ„ํ•ด ๋ฌธ์žฅ๋งˆ๋‹ค ๋ฌธ์ž์—ด์„ ์ €์žฅํ•จ

์ฆ‰, Open, Save As๊ฐ€ ์ž…๋ ฅ๋˜์—ˆ์œผ๋ฉด [[Open], [Save, As]]์™€ ๊ฐ™์ด ์ €์žฅํ•จ

 

๐Ÿค” ํ•œ ๋ฌธ์žฅ์—์„œ ๊ฐ ๋‹จ์–ด์˜ ์ฒซ ๋ฌธ์ž์— ๋Œ€ํ•ด key ์‚ฌ์šฉ ๊ฐ€๋Šฅ ์—ฌ๋ถ€ ํ™•์ธ

        bool check=false;
        string temp;
        // ์ฒซ ๋‹จ์–ด ํ™•์ธ
        for(int j=0; j<current[i].size(); j++){
            
            if(check) break;
            if(alpha[tolower(current[i][j][0])-97]==0){
                alpha[tolower(current[i][j][0])-97]=1;
                string key="[" + current[i][j].substr(0,1) + "]";
                check=true;
                current[i][j].replace(0,1,key); // ๋Œ€์ฒด
            }
        }

๋จผ์ € ๊ฐ ๋‹จ์–ด์˜ ์ฒซ ๋ฌธ์ž์— ๋Œ€ํ•ด key๋กœ ์ง€์ •ํ•  ์ˆ˜ ์žˆ์œผ๋ฉด key๋กœ ์ง€์ •ํ•ด์•ผ ํ•จ

๋”ฐ๋ผ์„œ ๋Œ€์†Œ๋ฌธ์ž๋ฅผ ๊ตฌ๋ถ„ํ•˜์ง€ ์•Š์œผ๋ฏ€๋กœ tolower๋กœ ๋ณ€ํ™˜ํ•˜์—ฌ ์†Œ๋ฌธ์ž-97 ๊ฐ’์ด 1์ธ์ง€ ํ™•์ธํ•˜๊ณ , 1์ด ์•„๋‹ˆ๋ผ๋ฉด key๋กœ ์ง€์ •ํ•จ

์ด๋•Œ ๋ฌธ์ž์—ด์—์„œ ์ฒซ ๋ฌธ์ž์ด๋ฏ€๋กœ replace(0,1,key)๋กœ ๋Œ€์ฒดํ•ด์คŒ

ํ•ด๋‹น ๋ฌธ์žฅ์—์„œ key๋กœ ์ง€์ •ํ–ˆ์œผ๋ฉด check=true๋กœ ๋ฐ”๊ฟˆ

 

๐Ÿค” ๋‹จ์–ด ๋‚ด ๋ฌธ์ž๋“ค์„ ๋Œ๋ฉด์„œ key ์ง€์ • ๊ฐ€๋Šฅ ์—ฌ๋ถ€ ํ™•์ธ

        if(!check){
            
            // ์ฒซ ๋‹จ์–ด ๋ชจ๋‘ ์ด๋ฏธ ํ‚ค๋กœ ์ง€์ •๋œ ๊ฒฝ์šฐ
            for(int j=0; j<current[i].size(); j++){
            
                for(int c=0; c<current[i][j].size(); c++){
                    if(check) break;
                    if(alpha[tolower(current[i][j][c])-97]==0){
                        alpha[tolower(current[i][j][c])-97]=1;
                        check=true;
                        string key="["+current[i][j].substr(c,1)+"]";
                        current[i][j].replace(c,1,key);
                    }
                }
            }            
        }

๋‹จ์–ด๋ณ„ ์ฒซ ๋ฌธ์ž๋ฅผ key๋กœ ์ง€์ •ํ•  ์ˆ˜ ์—†๋Š” ๊ฒฝ์šฐ ์—ฌ์ „ํžˆ check=false์ž„

๋”ฐ๋ผ์„œ check=false ์ธ ๊ฒฝ์šฐ ๋ฌธ์žฅ ๋‚ด ๋ฌธ์ž์—ด๋“ค์—์„œ ๋ฌธ์ž๋“ค์„ ์‚ดํŽด๋ณด๋ฉด์„œ key๋กœ ์ง€์ •๋œ ์—ฌ๋ถ€๋ฅผ ํ™•์ธํ•˜๊ณ , ์ง€์ •๋˜์ง€ ์•Š์•˜๋‹ค๋ฉด ์ง€์ •ํ•˜๊ณ  ํ•ด๋‹น ์œ„์น˜๋ฅผ [๋ฌธ์ž]๋กœ ๋ฐ”๊ฟˆ

check=true๋กœ ๋ฐ”๊พผ ํ›„, key๊ฐ€ ์ง€์ •๋˜์—ˆ์œผ๋ฏ€๋กœ ๋ฐ˜๋ณต๋ฌธ์„ ์ข…๋ฃŒํ•จ

 

๐Ÿค” ์ •๋‹ต ์ถœ๋ ฅ

        for(string s: current[i]) cout << s << " ";
        cout << endl;

๊ฐ ๋‹จ์–ด๋Š” ํ•˜๋‚˜์˜ ๊ณต๋ฐฑ์œผ๋กœ ๊ตฌ๋ถ„๋˜๋ฏ€๋กœ ๊ฐ ๋ฌธ์žฅ๋งˆ๋‹ค ๋‹จ์–ด๋ฅผ ๊ณต๋ฐฑ์œผ๋กœ ๊ตฌ๋ถ„ํ•˜์—ฌ ์ถœ๋ ฅํ•จ

 

๐Ÿ“ ์ „์ฒด ์ฝ”๋“œ

#include <iostream>
#include <vector>
#include<string>
#include <sstream>
using namespace std;

int main(){
    int N; cin >> N; 
    vector<string> v(N);
    vector<int> alpha(26);
    vector<string> current[N];
    for(int i=0; i<N; i++){
        getline(cin >> ws, v[i]); // Removing consecutive whitespace
    }
    //for(string s: v) cout << s << endl;

    for(int i=0; i<N; i++){
        // splice with whitespace        
        istringstream input;
        input.str(v[i]);
        for(string s; getline(input,s,input.widen(' '));) current[i].push_back(s);
        //for(string s: current[i]) cout << s << endl;
    }
    //temp=current;
    for(int i=0; i<N; i++){
        bool check=false;
        string temp;
        // ์ฒซ ๋‹จ์–ด ํ™•์ธ
        for(int j=0; j<current[i].size(); j++){
            
            if(check) break;
            if(alpha[tolower(current[i][j][0])-97]==0){
                alpha[tolower(current[i][j][0])-97]=1;
                string key="[" + current[i][j].substr(0,1) + "]";
                check=true;
                current[i][j].replace(0,1,key); // ๋Œ€์ฒด
            }
        }
        if(!check){
            
            // ์ฒซ ๋‹จ์–ด ๋ชจ๋‘ ์ด๋ฏธ ํ‚ค๋กœ ์ง€์ •๋œ ๊ฒฝ์šฐ
            for(int j=0; j<current[i].size(); j++){
            
                for(int c=0; c<current[i][j].size(); c++){
                    if(check) break;
                    if(alpha[tolower(current[i][j][c])-97]==0){
                        alpha[tolower(current[i][j][c])-97]=1;
                        check=true;
                        string key="["+current[i][j].substr(c,1)+"]";
                        current[i][j].replace(c,1,key);
                    }
                }
            }            
        }
        for(string s: current[i]) cout << s << " ";
        cout << endl;
    }
    return 0;
}

 

โœ… ์ œ์ถœ ๊ฒฐ๊ณผ

728x90
๋ฐ˜์‘ํ˜•

๊ด€๋ จ๊ธ€ ๋”๋ณด๊ธฐ