λ³Έλ¬Έ λ°”λ‘œκ°€κΈ°
πŸ”₯ 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

λŒ“κΈ€