๐Ÿ“ Coding Test Study/Algorithm Problem

[C++][ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค][2021 ์นด์นด์˜ค ์ฑ„์šฉ์—ฐ๊ณ„ํ˜• ์ธํ„ด์‹ญ] ์ˆซ์ž ๋ฌธ์ž์—ด๊ณผ ์˜๋‹จ์–ด

ibelieveinme 2021. 8. 22. 08:17
728x90

๋ฌธ์ œ)

 

์ฝ”๋”ฉํ…Œ์ŠคํŠธ ์—ฐ์Šต - ์ˆซ์ž ๋ฌธ์ž์—ด๊ณผ ์˜๋‹จ์–ด

๋„ค์˜ค์™€ ํ”„๋กœ๋„๊ฐ€ ์ˆซ์ž๋†€์ด๋ฅผ ํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ๋„ค์˜ค๊ฐ€ ํ”„๋กœ๋„์—๊ฒŒ ์ˆซ์ž๋ฅผ ๊ฑด๋„ฌ ๋•Œ ์ผ๋ถ€ ์ž๋ฆฟ์ˆ˜๋ฅผ ์˜๋‹จ์–ด๋กœ ๋ฐ”๊พผ ์นด๋“œ๋ฅผ ๊ฑด๋„ค์ฃผ๋ฉด ํ”„๋กœ๋„๋Š” ์›๋ž˜ ์ˆซ์ž๋ฅผ ์ฐพ๋Š” ๊ฒŒ์ž„์ž…๋‹ˆ๋‹ค. ๋‹ค์Œ์€ ์ˆซ์ž์˜ ์ผ๋ถ€ ์ž

programmers.co.kr

 

๋ฌธ์ œ์„ค๋ช…)

์ˆซ์ž+๋ฌธ์ž๋กœ ์ฃผ์–ด์ง€๋Š” string ์„ ๋ชจ๋‘ ์ˆซ์ž๋กœ ์น˜ํ™˜ํ•˜์—ฌ ์ถœ๋ ฅํ•ด์•ผ ํ•œ๋‹ค.

 

๋ฌธ์ œํ’€์ด)

์ž…์ถœ๋ ฅ ์˜ˆ๋ฅผ ๋ณด๋ฉด, "one4sevennight" ์„ 1478๋กœ ๋ฐ”๊ฟ”์„œ ์ถœ๋ ฅํ–ˆ๋‹ค.

์ฆ‰, ๋ฌธ์ž๋Š” ์ˆซ์ž๋กœ ๋ณ€ํ™˜ํ•ด์•ผํ•˜๊ณ  ์ˆซ์ž๋Š” ๊ทธ๋Œ€๋กœ ์ถœ๋ ฅํ•˜๋ฉด ๋œ๋‹ค.

 

๋”ฐ๋ผ์„œ, string s ๋ฅผ i๋ฒˆ์งธ๋ถ€ํ„ฐ ํƒ์ƒ‰ํ•ด์„œ ์ˆซ์ž๊ฐ€ ๋‚˜์˜ค๋ฉด ์ƒˆ๋กœ์šด ๋ฌธ์ž์—ด์ธ string numString์— ๋„ฃ๊ณ , ๋ฌธ์ž๊ฐ€ ๋‚˜์˜ค๋ฉด ํ•ด๋‹น ๋ฌธ์ž๊ฐ€ zero ~ nine ์ค‘์— ์–ด๋–ค ์ˆซ์ž์ธ์ง€๋ฅผ ์•Œ์•„๋‚ด์„œ numString๋ณ€์ˆ˜์— ๋„ฃ๋Š”๋‹ค.

 

๋ฌธ์ž ํƒ์ƒ‰๋ฐฉ๋ฒ•์€ s[i] ๊ฐ€ 'z' ๋ผ๋ฉด zero๋ผ๋Š” ๋ฌธ์ž์—ด๋ฟ์ด๋ฏ€๋กœ s[i] ~ s[i+3]๋ฅผ 0์„ ์ •๋‹ต ๋ฌธ์ž์—ด numString์— ๋„ฃ๋Š”๋‹ค.

                      s[i] ๊ฐ€ 't'๋ผ๋ฉด two ๋˜๋Š” three ๋ฌธ์ž์—ด์ด๋ฏ€๋กœ s[i+1]๊นŒ์ง€ ํ™•์ธํ•˜์—ฌ 2 ๋˜๋Š” 3์„ numString์— ๋„ฃ๋Š”๋‹ค.

 

๋งˆ์ง€๋ง‰์œผ๋กœ string numString์„ ์ˆซ์ž๋กœ ๋ฐ”๊ฟ”์„œ(atoi()ํ•จ์ˆ˜ ์ด์šฉ) returnํ•ด์ค€๋‹ค.

 

์ฃผ์˜์‚ฌํ•ญ)

string -> int ๋กœ ๋ณ€ํ™˜ํ•˜๋Š” ํ•จ์ˆ˜๋Š” atoi() ์ด๋‹ค.

์ด ๋•Œ, ๊ทธ๋ƒฅ atoi()๋ฅผ ์จ์ฃผ๋ฉด ์•ˆ๋˜๊ณ , C์–ธ์–ด ํƒ€์ž… ํ•จ์ˆ˜์ด๋ฏ€๋กœ atoi(string๋ณ€์ˆ˜.c_str()) ํ•จ์ˆ˜๋ฅผ ์จ์ค˜์•ผ ํ•œ๋‹ค.

 

์ฝ”๋“œ)

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

int solution(string s) {
    string numString = "";
    
    for(int i=0; i<s.size(); i++){
        //์ˆซ์ž ์ผ ๋•Œ: ๋ฐ”๊ฟ€ ํ•„์š” ์—†์ด ๊ทธ๋Œ€๋กœ ์ถœ๋ ฅํ•˜๋ฉด ๋จ
        if(s[i]>='0' && s[i]<='9'){
            numString += s[i];
            continue;
        }
        //๋ฌธ์ž์ผ ๋•Œ: ์ˆซ์ž๋กœ ๋ฐ”๊ฟ”์•ผ ํ•จ
        else{
            switch(s[i]){
                case 'z'://zero
                    i+=3;
                    numString+='0';
                    break;
                case 'o'://one
                    i+=2;
                    numString+='1';
                    break;
                case 't'://two or three
                    if(s[i+1]=='w'){
                        i+=2;
                        numString+='2';
                    }
                    else if(s[i+1]=='h'){
                        i+=4;
                        numString+='3';
                    }
                    break;
                case 'f'://four or five
                    if(s[i+1]=='o'){
                        i+=3;
                        numString+='4';
                    }
                    else if(s[i+1]=='i'){
                        i+=3;
                        numString+='5';
                    }
                    break;
                case 's'://six or seven
                    if(s[i+1]=='i'){
                        i+=2;
                        numString+='6';
                    }
                    else if(s[i+1]=='e'){
                        i+=4;
                        numString+='7';
                    }
                    break;
                case 'e'://eight
                    i+=4;
                    numString+='8';
                    break;
                case 'n'://nine
                    i+=3;
                    numString+='9';
                    break;
            }
        }
    }
    return atoi(numString.c_str());
}

 

728x90