๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
๐Ÿ”ฅ PS(Problem Solving) ๐Ÿ”ฅ/programmers

[ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค] #42888 ์˜คํ”ˆ์ฑ„ํŒ…๋ฐฉ

by dar0m! 2019. 9. 9.

2018๋…„ KAKAO BLIND RECRUITMENT

 

์ฝ”๋”ฉํ…Œ์ŠคํŠธ ์—ฐ์Šต - ์˜คํ”ˆ์ฑ„ํŒ…๋ฐฉ | ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค

์˜คํ”ˆ์ฑ„ํŒ…๋ฐฉ ์นด์นด์˜คํ†ก ์˜คํ”ˆ์ฑ„ํŒ…๋ฐฉ์—์„œ๋Š” ์นœ๊ตฌ๊ฐ€ ์•„๋‹Œ ์‚ฌ๋žŒ๋“ค๊ณผ ๋Œ€ํ™”๋ฅผ ํ•  ์ˆ˜ ์žˆ๋Š”๋ฐ, ๋ณธ๋ž˜ ๋‹‰๋„ค์ž„์ด ์•„๋‹Œ ๊ฐ€์ƒ์˜ ๋‹‰๋„ค์ž„์„ ์‚ฌ์šฉํ•˜์—ฌ ์ฑ„ํŒ…๋ฐฉ์— ๋“ค์–ด๊ฐˆ ์ˆ˜ ์žˆ๋‹ค. ์‹ ์ž…์‚ฌ์›์ธ ๊น€ํฌ๋ฃจ๋Š” ์นด์นด์˜คํ†ก ์˜คํ”ˆ ์ฑ„ํŒ…๋ฐฉ์„ ๊ฐœ์„คํ•œ ์‚ฌ๋žŒ์„ ์œ„ํ•ด, ๋‹ค์–‘ํ•œ ์‚ฌ๋žŒ๋“ค์ด ๋“ค์–ด์˜ค๊ณ , ๋‚˜๊ฐ€๋Š” ๊ฒƒ์„ ์ง€์ผœ๋ณผ ์ˆ˜ ์žˆ๋Š” ๊ด€๋ฆฌ์ž์ฐฝ์„ ๋งŒ๋“ค๊ธฐ๋กœ ํ–ˆ๋‹ค. ์ฑ„ํŒ…๋ฐฉ์— ๋ˆ„๊ตฐ๊ฐ€ ๋“ค์–ด์˜ค๋ฉด ๋‹ค์Œ ๋ฉ”์‹œ์ง€๊ฐ€ ์ถœ๋ ฅ๋œ๋‹ค. [๋‹‰๋„ค์ž„]๋‹˜์ด ๋“ค์–ด์™”์Šต๋‹ˆ๋‹ค. ์ฑ„ํŒ…๋ฐฉ์—์„œ ๋ˆ„๊ตฐ๊ฐ€ ๋‚˜๊ฐ€๋ฉด ๋‹ค์Œ ๋ฉ”์‹œ์ง€๊ฐ€ ์ถœ๋ ฅ๋œ๋‹ค. [๋‹‰๋„ค์ž„]๋‹˜์ด ๋‚˜๊ฐ”์Šต๋‹ˆ๋‹ค. ์ฑ„ํŒ…

programmers.co.kr

 

๋ฌธ์ œ

์ฑ„ํŒ…๋ฐฉ์— ๋“ค์–ด์˜ค๊ณ  ๋‚˜๊ฐ€๊ฑฐ๋‚˜, ๋‹‰๋„ค์ž„์„ ๋ณ€๊ฒฝํ•œ ๊ธฐ๋ก์ด ๋‹ด๊ธด ๋ฌธ์ž์—ด ๋ฐฐ์—ด record๊ฐ€ ๋งค๊ฐœ๋ณ€์ˆ˜๋กœ ์ฃผ์–ด์งˆ ๋•Œ, ๋ชจ๋“  ๊ธฐ๋ก์ด ์ฒ˜๋ฆฌ๋œ ํ›„, ์ตœ์ข…์ ์œผ๋กœ ๋ฐฉ์„ ๊ฐœ์„คํ•œ ์‚ฌ๋žŒ์ด ๋ณด๊ฒŒ ๋˜๋Š” ๋ฉ”์‹œ์ง€๋ฅผ ๋ฌธ์ž์—ด ๋ฐฐ์—ด ํ˜•ํƒœ๋กœ return ํ•˜๋„๋ก solution ํ•จ์ˆ˜๋ฅผ ์™„์„ฑํ•˜๋ผ.

ํ’€์ด

๋ฌธ์ž์—ด์„ split ํ•ด์•ผํ•˜๋Š” ๋ถ€๋ถ„์—์„œ C++์—๋Š” ํ•ด๋‹น ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๊ฐ€ ์—†์–ด์„œ ๋ฌธ์ž์—ด ๋‹ค๋ฃจ๋Š” ๋ถ€๋ถ„์—์„œ ๊ต‰์žฅํžˆ ์• ์ผ๋‹ค.


strtok ๋ฅผ ํ™œ์šฉํ•˜์—ฌ split๊ณผ ๊ฐ™์€ ํšจ๊ณผ๋ฅผ ๋‚ผ ์ˆ˜ ์žˆ๋Š”๋ฐ ์ž๋ฃŒํ˜•์ด char* ์ด๊ธฐ ๋•Œ๋ฌธ์— record ์˜ ์ž๋ฃŒํ˜•์ธ string ์„ ๋จผ์ € char ํ˜•์œผ๋กœ ๋ฐ”๊พผ ๋‹ค์Œ ํฌ์ธํ„ฐ๋ฅผ ์ด์šฉํ•˜์—ฌ ๋ฌธ์ž์—ด๋“ค์„ ๊ตฌ๋ถ„ํ–ˆ๋‹ค. 

21, 27, 31 ๋ฒˆ ์ค„ ๊ฐ™์€ ๋ถ€๋ถ„์€

tok = strtok(NULL, " ");

while๋ฌธ ๋‚ด๋ถ€์— ์ฒซ๋ฒˆ์งธ ํŒŒ๋ผ๋ฉ”ํ„ฐ๋กœ NULL์„ ์ฃผ๊ฒŒ๋˜๋ฉด ๋‚ด๋ถ€ ๋ฒ„ํผ์— ์ €์žฅ๋˜์–ด์žˆ๋Š” ํฌ์ธํ„ฐ์—์„œ ๋‹ค์Œ " "๋ฅผ ์ฐพ๊ณ  ๊ทธ ๋’ค์— ๋ฌธ์ž์—ด์˜ ์ฃผ์†Œ๋ฅผ ๋ฐ˜ํ™˜ํ•˜๊ฒŒ ๋œ๋‹ค. ์ด๋ ‡๊ฒŒ ํ•ด์„œ ๊ณ„์†ํ•ด์„œ ์ˆœํšŒํ•˜๋ฉด ๋ชจ๋“  ๋ฌธ์ž์—ด์„ ์ž˜๋ผ๋‚ผ ์ˆ˜ ์žˆ๋‹ค.

๋ฌธ์ž์—ด ์ฒ˜๋ฆฌ๋ฅผ ๋งˆ์น˜๊ณ  ๋‚˜๋ฉด Enter ๋˜๋Š” Change ์ผ ๋•Œ๋Š” ์„ธ ๋ฉ์ด, Leave ์ผ ๋•Œ๋Š” ๋‘ ๋ฉ์ด๋กœ ๋‚˜๋‰˜๊ฒŒ ๋œ๋‹ค. ์ด ๋•Œ ๋งˆ์ง€๋ง‰์— ํ•œ ๋ฒˆ์— ๋ฌธ์ž์—ด๋กœ ์ถœ๋ ฅํ•˜๊ธฐ ์œ„ํ•˜์—ฌ ๋ชจ๋“  ๋‚ด์šฉ์„ ์ •๋ฆฌํ•˜์—ฌ vector v ์— ์ €์žฅํ•ด๋‘๋Š”๋ฐ pair ์Œ์„ ์ด์šฉํ•˜์—ฌ ์ฒซ ๋ฒˆ์งธ ๋ช…๋ น์–ด ๋ถ€๋ถ„์ด Enter ์ด๋ผ๋ฉด second ๊ฐ’์— 1์„, Leave ๋ผ๋ฉด second ๊ฐ’์— 0์„ ๋„ฃ๋Š”๋‹ค.

๊ทธ๋ฆฌ๊ณ  ๋‚˜์„œ v์˜ size ๋งŒํผ ๋ฐ˜๋ณตํ•˜์—ฌ ์ฐจ๋ก€๋กœ second ๊ฐ’์„ ํ™•์ธํ•˜์—ฌ 1์ด๋ผ๋ฉด "๋‹˜์ด ๋“ค์–ด์™”์Šต๋‹ˆ๋‹ค.", 0์ด๋ผ๋ฉด "๋‹˜์ด ๋‚˜๊ฐ”์Šต๋‹ˆ๋‹ค."๋ฅผ ๋งˆ์ง€๋ง‰ ๋ฆฌํ„ด๋  ๋ฐฐ์—ด์ธ answer์— ์ €์žฅํ•ด์ค€๋‹ค.

 

์ฝ”๋“œ

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
#include <string>
#include <vector>
#include <map>
using namespace std;
 
vector<string> solution(vector<string> record) {
    typedef pair<stringint> p;
    vector<p> v;
    vector<string> answer;
    map<stringstring> user;
    string uid, nickname;
    for (int i = 0; i < record.size(); i++) {
        vector<char> str(record[i].begin(), record[i].end());
        str.push_back('\0');
        char* p_str = &str[0];
        char* tok = strtok(p_str, " ");
        
        if (!strcmp(tok, "Enter")) {
            tok = strtok(NULL" ");
            uid = tok;
            tok = strtok(NULL" ");
            nickname = tok;
            user[uid] = nickname;
            v.push_back({ uid, 1 });
        }
        else if (!strcmp(tok, "Leave")) {
            tok = strtok(NULL" ");
            uid = tok;
            v.push_back({ uid, 0 });
        }
        else { // Change
            tok = strtok(NULL" ");
            uid = tok;
            tok = strtok(NULL" ");
            nickname = tok;
            user[uid] = nickname;
        }
    }
    for (int i = 0; i < v.size(); i++) {
        if (v[i].second) {
            nickname = user[v[i].first];
            answer.push_back(nickname + "๋‹˜์ด ๋“ค์–ด์™”์Šต๋‹ˆ๋‹ค.");
        }
        else {
            nickname = user[v[i].first];
            answer.push_back(nickname + "๋‹˜์ด ๋‚˜๊ฐ”์Šต๋‹ˆ๋‹ค.");
        }
    }
    return answer;
}
 
int main() {
    solution({ "Enter uid1234 Muzi""Enter uid4567 Prodo","Leave uid1234","Enter uid1234 Prodo","Change uid4567 Ryan" });
    return 0;
 
}
cs

 

๋‹ค๋ฅธ ์‚ฌ๋žŒ ํ’€์ด ์ฐธ๊ณ : sstream

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
#include <string>
#include <vector>
#include <sstream>
#include <iostream>
#include <map>
using namespace std;
 
 
vector<string> solution(vector<string> record) {
    vector<string> answer;
    string command;
    string ID;
    string uid;
   map<string,string> m;
 
 
    for(string input:record)
    {
        stringstream ss(input);
        ss>>command;
        ss>>uid;
        if(command=="Enter" || command=="Change")
        {
            ss>>ID;
            m[uid]=ID;
        }
    }
 
   for(string input:record)
    {
        stringstream ss(input);
        ss>>command;
        ss>>uid;
        if(command=="Enter")
        {
         ID=(m.find(uid)->second);
 
            string temp = ID+"๋‹˜์ด ๋“ค์–ด์™”์Šต๋‹ˆ๋‹ค.";
         answer.push_back(temp);
 
        }
      else if(command=="Leave")
      {
         ID=(m.find(uid)->second);
            string temp = ID+"๋‹˜์ด ๋‚˜๊ฐ”์Šต๋‹ˆ๋‹ค.";
         answer.push_back(temp);
      }
    }
    return answer;
}
cs

๋Œ“๊ธ€