๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค/1๋‹จ๊ณ„

[ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค Lv1] : ์‹ ๊ทœ ์•„์ด๋”” ์ถ”์ฒœ

by Jaeguk 2022. 6. 13.
๋ฌธ์ œ ๋งํฌ

https://programmers.co.kr/learn/courses/30/lessons/72410

 

์ฝ”๋”ฉํ…Œ์ŠคํŠธ ์—ฐ์Šต - ์‹ ๊ทœ ์•„์ด๋”” ์ถ”์ฒœ

์นด์นด์˜ค์— ์ž…์‚ฌํ•œ ์‹ ์ž… ๊ฐœ๋ฐœ์ž ๋„ค์˜ค๋Š” "์นด์นด์˜ค๊ณ„์ •๊ฐœ๋ฐœํŒ€"์— ๋ฐฐ์น˜๋˜์–ด, ์นด์นด์˜ค ์„œ๋น„์Šค์— ๊ฐ€์ž…ํ•˜๋Š” ์œ ์ €๋“ค์˜ ์•„์ด๋””๋ฅผ ์ƒ์„ฑํ•˜๋Š” ์—…๋ฌด๋ฅผ ๋‹ด๋‹นํ•˜๊ฒŒ ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. "๋„ค์˜ค"์—๊ฒŒ ์ฃผ์–ด์ง„ ์ฒซ ์—…๋ฌด๋Š” ์ƒˆ๋กœ

programmers.co.kr

์‚ฌ์šฉ์ž๊ฐ€ ์•„์ด๋””๋ฅผ ์ž…๋ ฅํ–ˆ์„ ๋•Œ ๋น„์Šทํ•˜๋ฉด์„œ ์นด์นด์˜ค ์•„์ด๋”” ๊ทœ์น™์— ๋งž๋Š” ์•„์ด๋””๋ฅผ ์ถ”์ฒœํ•ด์ฃผ๋Š” ํ”„๋กœ๊ทธ๋žจ์„ ๋งŒ๋“ค์–ด๋ณด์ž.

ํ’€์ด
1๋‹จ๊ณ„ new_id์˜ ๋ชจ๋“  ๋Œ€๋ฌธ์ž๋ฅผ ๋Œ€์‘๋˜๋Š” ์†Œ๋ฌธ์ž๋กœ ์น˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.
2๋‹จ๊ณ„ new_id์—์„œ ์•ŒํŒŒ๋ฒณ ์†Œ๋ฌธ์ž, ์ˆซ์ž, ๋นผ๊ธฐ(-), ๋ฐ‘์ค„(_), ๋งˆ์นจํ‘œ(.)๋ฅผ ์ œ์™ธํ•œ ๋ชจ๋“  ๋ฌธ์ž๋ฅผ ์ œ๊ฑฐํ•ฉ๋‹ˆ๋‹ค.
3๋‹จ๊ณ„ new_id์—์„œ ๋งˆ์นจํ‘œ(.)๊ฐ€ 2๋ฒˆ ์ด์ƒ ์—ฐ์†๋œ ๋ถ€๋ถ„์„ ํ•˜๋‚˜์˜ ๋งˆ์นจํ‘œ(.)๋กœ ์น˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.
4๋‹จ๊ณ„ new_id์—์„œ ๋งˆ์นจํ‘œ(.)๊ฐ€ ์ฒ˜์Œ์ด๋‚˜ ๋์— ์œ„์น˜ํ•œ๋‹ค๋ฉด ์ œ๊ฑฐํ•ฉ๋‹ˆ๋‹ค.
5๋‹จ๊ณ„ new_id๊ฐ€ ๋นˆ ๋ฌธ์ž์—ด์ด๋ผ๋ฉด, new_id์— "a"๋ฅผ ๋Œ€์ž…ํ•ฉ๋‹ˆ๋‹ค.
6๋‹จ๊ณ„ new_id์˜ ๊ธธ์ด๊ฐ€ 16์ž ์ด์ƒ์ด๋ฉด, new_id์˜ ์ฒซ 15๊ฐœ์˜ ๋ฌธ์ž๋ฅผ ์ œ์™ธํ•œ ๋‚˜๋จธ์ง€ ๋ฌธ์ž๋“ค์„ ๋ชจ๋‘ ์ œ๊ฑฐํ•ฉ๋‹ˆ๋‹ค.
     ๋งŒ์•ฝ ์ œ๊ฑฐ ํ›„ ๋งˆ์นจํ‘œ(.)๊ฐ€ new_id์˜ ๋์— ์œ„์น˜ํ•œ๋‹ค๋ฉด ๋์— ์œ„์น˜ํ•œ ๋งˆ์นจํ‘œ(.) ๋ฌธ์ž๋ฅผ ์ œ๊ฑฐํ•ฉ๋‹ˆ๋‹ค.
7๋‹จ๊ณ„ new_id์˜ ๊ธธ์ด๊ฐ€ 2์ž ์ดํ•˜๋ผ๋ฉด, new_id์˜ ๋งˆ์ง€๋ง‰ ๋ฌธ์ž๋ฅผ new_id์˜ ๊ธธ์ด๊ฐ€ 3์ด ๋  ๋•Œ๊นŒ์ง€ ๋ฐ˜๋ณตํ•ด์„œ ๋์— ๋ถ™์ž…๋‹ˆ๋‹ค.

์œ„์™€ ๊ฐ™์ด ์ฃผ์–ด์ง„ ๋‹จ๊ณ„์— ๋”ฐ๋ผ ๊ทธ๋Œ€๋กœ ๊ตฌํ˜„ํ•ด์ฃผ๋ฉด ๋œ๋‹ค.

  • 1๋‹จ๊ณ„

๋ชจ๋“  ๋Œ€๋ฌธ์ž ์•ŒํŒŒ๋ฒณ์„ ์†Œ๋ฌธ์ž๋กœ ๋งŒ๋“ ๋‹ค.

๋Œ€๋ฌธ์ž ์•ŒํŒŒ๋ฒณ์˜ ์‹œ์ž‘ 'A' ์˜ ์•„์Šคํ‚ค์ฝ”๋“œ๋Š” 65์ด๊ณ  ๋งˆ์ง€๋ง‰ 'Z'์˜ ์•„์Šคํ‚ค์ฝ”๋“œ๋Š” 90์ด๋‹ค. ์ด๊ฑธ ์ด์šฉํ•ด์„œ ์•„์ด๋””์— ์‚ฌ์šฉ๋œ ๋ฌธ์ž์˜ ์•„์Šคํ‚ค์ฝ”๋“œ๊ฐ€ 65์™€ 90 ์‚ฌ์ด๋ผ๋ฉด ๋Œ€๋ฌธ์ž ์ด๋ฏ€๋กœ += 32๋ฅผ ํ•ด์ค˜์„œ ์†Œ๋ฌธ์ž๋กœ ๋ฐ”๊ฟ”์ค€๋‹ค.

+ 32๋ฅผ ํ•˜๋Š” ์ด์œ ๋Š” ์†Œ๋ฌธ์ža์˜ ์•„์Šคํ‚ค์ฝ”๋“œ๋Š” 97๋กœ 'A'์™€ 'a'์˜ ์ฐจ์ด๊ฐ€ 32๊ฐ€ ๋‚˜๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.

  • 2๋‹จ๊ณ„

์•„์ด๋””๋ฅผ ๊ตฌ์„ฑํ•˜๋Š” ๋ฌธ์ž๊ฐ€ ์•ŒํŒŒ๋ฒณ ์†Œ๋ฌธ์ž, ์ˆซ์ž, '-', '_', '.' ๊ฐ€ ์•„๋‹ˆ๋ผ๋ฉด ํ•ด๋‹น ๋ฌธ์ž๋ฅผ ์ œ๊ฑฐํ•œ๋‹ค.

์•„์ด๋””์˜ ๋ฌธ์ž๋ฅผ ์ฒ˜์Œ๋ถ€ํ„ฐ ๋Œ๋ฉด์„œ ์œ„์˜ 5๊ฐ€์ง€์ค‘ ํ•˜๋‚˜์— ํ•ด๋‹นํ•˜๋ฉด temp ๋ผ๋Š” ๋นˆ ๋ฌธ์ž์—ด ํ•ด๋‹น๋ฌธ์ž๋ฅผ ์— ๋ถ™์—ฌ์ฃผ์—ˆ๋‹ค. temp์— ๋ถ™์ธ ๋‹ค๋Š” ๋œป์€ ๊ทธ ๋ฌธ์ž๋ฅผ ์‚ญ์ œํ•˜์ง€ ์•Š๊ฒ ๋‹ค๋Š” ๋œป์ด๋‹ค.

    string temp = "";
    for(int i = 0; i<new_id.length(); i++){
        if(is_ok(new_id[i]))
            temp += new_id[i];
    }
    new_id = temp;

์ด๋•Œ is_ok() ํ•จ์ˆ˜๋Š” 5๊ฐ€์ง€ ์ค‘ ํ•˜๋‚˜์— ํ•ด๋‹นํ•˜๋Š” ์ง€๋ฅผ true, false๋กœ ๋ฆฌํ„ดํ•ด์ฃผ๋Š” ํ•จ์ˆ˜์ด๋‹ค.

  • 3๋‹จ๊ณ„

๋งˆ์นจํ‘œ๊ฐ€ 2๊ฐœ์ด์ƒ ๋ถ™์–ด์žˆ์œผ๋ฉด ํ•˜๋‚˜๋งŒ ๋‚จ๊ธฐ๊ณ  ๋‚˜๋จธ์ง€๋Š” ์‚ญ์ œํ•œ๋‹ค.

์ด๊ฒƒ ๋˜ํ•œ ๊ธฐ์กด์˜ ์•„์ด๋””๋ฅผ ๋Œ๋ฉด์„œ ์ƒˆ๋กœ์šด ๋ฌธ์ž์—ด temp์— ์‚ด๋ฆด ๋ฌธ์ž๋งŒ ๋ถ™์—ฌ์ฃผ๋Š” ๋ฐฉ์‹์„ ์ด์šฉํ–ˆ๋‹ค.

๋ฌธ์ž์—ด์„ ์ฒ˜์Œ๋ถ€ํ„ฐ ๋Œ๋ฉด์„œ ์ฒ˜์Œ ๋งˆ์นจํ‘œ๊ฐ€ ๋‚˜์˜ค๋ฉด ์ผ๋‹จ temp์— ๋ถ™์—ฌ์ค€๋‹ค. ๊ทธ๋ฆฌ๊ณ  ์—ฐ์†ํ•ด์„œ ๋งˆ์นจํ‘œ๊ฐ€ ๋‚˜์˜ค์ง€ ์•Š์„๋•Œ ๊นŒ์ง€ ๋ถ™์ด์ง€ ์•Š๊ณ  ์Šคํ‚ตํ•œ๋‹ค. ๊ณผ์ •์„ ๋ฐ˜๋ณตํ•ด์„œ ์ฒ˜์Œ ๋งˆ์นจํ‘œ๊ฐ€ ๋“ฑ์žฅํ•  ๋•Œ๋งŒ temp์— ๋ถ™์—ฌ์ฃผ๊ณ  ๋งˆ์นจํ‘œ๊ฐ€ ์—ฐ์†ํ•ด์„œ ๋‚˜์˜ค๋ฉด ๋ถ™์—ฌ์ฃผ์ง€ ์•Š๋Š”๋‹ค. ์ด๋•Œ ๋งˆ์นจํ‘œ๊ฐ€ ์•„๋‹Œ ๋‹ค๋ฅธ ๋ฌธ์ž๋Š” ๋ฌด์กฐ๊ฑด temp์— ๋ถ™์—ฌ์ฃผ๋„๋ก ํ•œ๋‹ค.

  • 4๋‹จ๊ณ„

๋ฌธ์ž์—ด์˜ ์ฒ˜์Œ ๋˜๋Š” ๋์ด ๋งˆ์นจํ‘œ๋ฉด ํ•ด๋‹น ๋งˆ์นจํ‘œ๋Š” ์‚ญ์ œํ•œ๋‹ค.

๋ฌธ์ž์—ด์„ ๊ตฌ์„ฑํ•˜๋Š” ๊ฐ ๋ฌธ์ž๋Š” ์ธ๋ฑ์Šค๋กœ ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์—

0๋ฒˆ ์ธ๋ฑ์Šค ๋˜๋Š” ๋งˆ์ง€๋ง‰ ์ธ๋ฑ์Šค๊ฐ€ ๋งˆ์นจํ‘œ๋ฉด ์‚ญ์ œํ•œ๋‹ค. ๋งŒ์•ฝ ๋‘˜๋‹ค ๋งˆ์นจํ‘œ๋ฉด ๋‘˜๋‹ค ์‚ญ์ œํ•œ๋‹ค.

์ด๋•Œ ์œ ์˜ํ•ด์•ผํ•  ์ ์€ ๋งŒ์•ฝ ๋ฌธ์ž์—ด์˜ ๊ธธ์ด๊ฐ€ 1์ด๋ฉด ์ฒ˜์Œ๊ณผ ๋์ด ๊ฐ™๋‹ค. ๊ทธ๋ ‡๊ธฐ ๋•Œ๋ฌธ์— 0๋ฒˆ์งธ ์ธ๋ฑ์Šค๋งŒ ์ฒดํฌํ•ด์ฃผ๋ฉด ๋œ๋‹ค.

๋งŒ์•ฝ ๋นˆ ๋ฌธ์ž์—ด์ด๋ฉด 0๋ฒˆ์ธ๋ฑ์Šค ์กฐ์ฐจ ์—†์œผ๋ฏ€๋กœ 4๋‹จ๊ณ„๋ฅผ ์‹คํ–‰ํ•  ํ•„์š”๊ฐ€ ์—†๋‹ค.

  • 5๋‹จ๊ณ„

๋งŒ์•ฝ new_id๊ฐ€ ๋นˆ ๋ฌธ์ž์—ด์ด๋ผ๋ฉด 'a'๋ฅผ ๋ถ™์—ฌ์ค€๋‹ค.

string์—๋Š” empty()๋ผ๋Š” ํ•จ์ˆ˜๊ฐ€ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ๋งŒ์•ฝ new_id.empty()๊ฐ€ true๋ฉด ๋น„์–ด์žˆ๋‹ค๋Š” ๋œป์ด๋ฏ€๋กœ += 'a' ๋ฅผ ํ†ตํ•ด 'a'๋ฅผ ๋ถ™์—ฌ์ค€๋‹ค.

๋น„์–ด์žˆ์ง€ ์•Š์œผ๋ฉด ์Šคํ‚ต

  • 6๋‹จ๊ณ„

๋งŒ์•ฝ ๋ฌธ์ž์—ด์˜ ๊ธธ์ด๊ฐ€ 16์ž ์ด์ƒ์ด๋ฉด 15์ž๋กœ ์ค„์ธ๋‹ค.

๋ฌธ์ž์—ด์˜ ๊ธธ์ด๋Š” string์— ์žˆ๋Š” length() ํ•จ์ˆ˜๋ฅผ ํ†ตํ•ด ์•Œ ์ˆ˜ ์žˆ๋‹ค. ๋งŒ์•ฝ length()์˜ ๋ฆฌํ„ด๊ฐ’์ด 16์ด์ƒ์ด๋ฉด

substr()ํ•จ์ˆ˜๋ฅผ ์ด์šฉํ•ด์„œ ๋ฌธ์ž์—ด์„ ์ž˜๋ผ์ค€๋‹ค.

substr(0,15)๋ฅผ ํ•˜๋ฉด 0๋ถ€ํ„ฐ ์‹œ์ž‘ํ•ด์„œ 15์ž๋ฅผ ์ž๋ฅธ๋‹ค๋Š” ๋œป์ด๋ฏ€๋กœ new_id = new_id.substr(0,15)๋ฅผ ํ•ด์ฃผ๋ฉด ๋œ๋‹ค.

๊ทธ๋ฆฌ๊ณ ๋‚˜์„œ 4๋‹จ๊ณ„๋ฅผ ํ•œ ๋ฒˆ ์‹œํ–‰์‹œ์ผœ์ค€๋‹ค.

  • 7๋‹จ๊ณ„

๋งŒ์•ฝ ๋ฌธ์ž์—ด์˜ ๊ธธ์ด๊ฐ€ 2์ดํ•˜๋ผ๋ฉด ๋งˆ์ง€๋ง‰๋ฌธ์ž๋ฅผ ๋’ค์— ๊ณ„์† ๋ถ™์—ฌ์„œ ๊ธธ์ด๊ฐ€ 3์ด ๋˜๋„๋ก ํ•œ๋‹ค.

์ด๊ฑด while๋ฌธ์„ ์ด์šฉํ•ด์„œ ํ•  ์ˆ˜ ์žˆ๋‹ค. ๋งˆ์ง€๋ง‰ ๋ฌธ์ž๋Š” length() - 1 ์ธ๋ฑ์Šค์— ์žˆ๋Š” ๋ฌธ์ž์ด๋ฏ€๋กœ length() - 1 ์— ์žˆ๋Š” ๋ฌธ์ž๋ฅผ

while(new_id.length() <= 3) ๋™์•ˆ์— ๋ฌธ์ž์—ด์˜ ๋งจ ๋’ค์— ๋ถ™์—ฌ์ค€๋‹ค.

 

์ด๋ ‡๊ฒŒ ํ•˜๋ฉด 7๋‹จ๊ณ„ ํ•จ์ˆ˜๋ฅผ ๋ชจ๋‘ ๊ตฌํ˜„ํ–ˆ๋‹ค.

 

 
#include <string>
#include <vector>
 
using namespace std;
 
bool is_ok(char ch){
    bool chk = false;
    if(ch - 0 >= 97 && ch - 0 <= 122)
        chk = true;
    else if(ch == '-' || ch == '_' || ch == '.')
        chk = true;
    else if(ch - 0 >= 48 && ch <= 57)
        chk = true;
    return chk;
}
 
void cut_string(string& new_id){
    string temp = "";
    for(int i = 0; i<new_id.length(); i++){
        if(is_ok(new_id[i]))
            temp += new_id[i];
    }
    new_id = temp;
}
 
void change_string(string& new_id){
    for(int i = 0; i<new_id.length(); i++){
        if(new_id[i] - 0 >= 65 && new_id[i] - 0 <= 90)
            new_id[i] += 32;
    }
}
 
void remove_dot(string& new_id){
    string temp = "";
    bool chk = false;
    for(int i = 0; i<new_id.length(); i++){
        if(new_id[i] == '.' && chk)
            continue;
        else if(new_id[i] == '.' && !chk){
            temp += new_id[i];
            chk = true;
        }
        else{
            temp += new_id[i];
            chk = false;
        }
    }
    new_id = temp;
}
 
void is_dot_side(string& new_id){
    if(new_id.empty())
        return;
    if(new_id[0== '.')
        new_id = new_id.substr(1,new_id.length());
    if(new_id.empty())
        return;
    if(new_id[new_id.length()-1== '.')
        new_id = new_id.substr(0,new_id.length()-1);
}
 
void plus_a(string& new_id){
    if(new_id.empty())
        new_id += 'a';
}
 
void reduce_length(string& new_id){
    if(new_id.length() >= 16)
        new_id = new_id.substr(0,15);
    if(new_id[new_id.length()-1== '.')
        new_id = new_id.substr(0,new_id.length() - 1);
}
 
void increase_length(string& new_id){
    if(new_id.length() >= 3)
        return;
    char temp = new_id[new_id.length() - 1];
    while(new_id.length() < 3)
        new_id += temp;
}
 
string solution(string new_id) {
    string answer = "";
    change_string(new_id);
    cut_string(new_id);
    remove_dot(new_id);
    is_dot_side(new_id);
    plus_a(new_id);
    reduce_length(new_id);
    increase_length(new_id);
    answer = new_id;
    return answer;
}
cs

 

๋‚˜๋Š” ๋ฌธ์ž๊ฐ€ ๋Œ€๋ฌธ์ž ์•ŒํŒŒ๋ฒณ์ธ์ง€ ํŒŒ์•…ํ•˜๊ธฐ ์œ„ํ•ด์„œ '๋ฌธ์ž' - 0 ์„ ํ•ด์„œ ์•„์Šคํ‚ค์ฝ”๋“œ๋ฅผ ์•Œ์•„๋‚ธ ๋‹ค์Œ ๋Œ€๋ฌธ์ž ์•ŒํŒŒ๋ฒณ์˜ ์•„์Šคํ‚ค์ฝ”๋“œ ๋ฒ”์œ„์ธ 65 ~ 90 ์‚ฌ์ด์— ๋“ค์–ด๊ฐ€๋Š”์ง€ ํŒŒ์•…ํ–ˆ๋‹ค. ๊ทธ๋Ÿฐ๋ฐ ๋‹ค๋ฅธ ๋ถ„๋“ค์˜ ์ฝ”๋“œ๋ฅผ ๋ณด๋ฉด์„œ if (char >= 'A || char <= 'Z') ์ด๋Ÿฐ์‹์œผ๋กœ๋„ ์กฐ๊ฑด๋ฌธ์„ ์“ธ ์ˆ˜ ์žˆ๋‹ค๋Š” ๊ฒƒ์„ ์ฒ˜์Œ์•Œ์•˜๋‹ค.

 

 

728x90