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

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

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

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

 

์ฝ”๋”ฉํ…Œ์ŠคํŠธ ์—ฐ์Šต - ์˜คํ”ˆ์ฑ„ํŒ…๋ฐฉ

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

programmers.co.kr

์˜คํ”ˆ ์ฑ„ํŒ…๋ฐฉ์˜ ์ถœ์ž… ๋ฉ”์„ธ์ง€๋ฅผ ๋ฆฌํ„ดํ•˜๋Š” ๋ฌธ์ œ.

ํ’€์ด

์‚ฌ์‹ค ํ’€์ด ๊ณผ์ • ์ž์ฒด๋Š” ์–ด์ œ ํ’€์–ด๋ดค๋˜ 1๋‹จ๊ณ„ ๋ฌธ์ œ๋“ค์ด ๋” ์–ด๋ ค์šด ๊ฒƒ ๊ฐ™๋‹ค.

ํ•˜์ง€๋งŒ ๋„์›Œ์“ฐ๊ธฐ๊ฐ€ ํฌํ•จ๋œ ๋ฌธ์ž์—ด์„ ๋„์›Œ์“ฐ๊ธฐ๋ฅผ ๊ธฐ์ค€์œผ๋กœ 3๊ฐœ์˜ ์ž…๋ ฅ์œผ๋กœ ๋‚˜๋ˆ ์•ผํ•œ๋‹ค๋Š”๊ฒŒ ์ œ์ผ ๊นŒ๋‹ค๋กœ์› ๋‹ค

"Enter Uid1234 Prodo" ๋ผ๊ณ  ์ž…๋ ฅ์ด ๋“ค์–ด์˜ค๋ฉด

๋ช…๋ น์–ด์ธ "Enter"๊ณผ ์œ ์ €์˜ ์•„์ด๋””์ธ "Uid1234" ๊ทธ๋ฆฌ๊ณ  ๋‹‰๋„ค์ž„ "Prodo"๋กœ ๋‚˜๋ˆ ์•ผํ•œ๋‹ค.

์œ ์ € ์•„์ด๋””๋Š” ์ค‘๋ณต๋  ์ˆ˜ ์—†์ง€๋งŒ ๋‹‰๋„ค์ž„์€ ์ค‘๋ณต๋  ์ˆ˜ ์žˆ๋‹ค. ๊ฐ™์€ Prodo๋ผ๋Š” ๋‹‰๋„ค์ž„์ด๋ผ๊ณ  ํ•ด๋„ 2๋ช…์˜ ์œ ์ €์ผ ์ˆ˜๋„ ์žˆ๋‹ค๋Š” ๋œป์ด๋‹ค.

  • ์ž…๋ ฅ๋ฌธ ์ชผ๊ฐœ๊ธฐ

์ฒ˜์Œ์— ๋‚˜๋Š” ๋„์›Œ์“ฐ๊ธฐ๊ฐ€ ๋ช‡ ๋ฒˆ์งธ ์ธ๋ฑ์Šค์ธ์ง€ ์ฐพ์•„์„œ ์ž๋ฅด๋Š” ๋ฐฉ๋ฒ•์„ ์‚ฌ์šฉํ–ˆ๋‹ค.

pos1์€ ์ฒซ ๋ฒˆ์งธ ๋„์›Œ์“ฐ๊ธฐ์˜ ์œ„์น˜, pos2๋Š” ๋‘ ๋ฒˆ์งธ ๋„์›Œ์“ฐ๊ธฐ์˜ ์œ„์น˜๋ผ๊ณ  ํ–ˆ์„ ๋•Œ

0 ~ pos1์•ž๊นŒ์ง€ ์ž๋ฅด๊ณ  pos1 + 1 ~ pos2 ์•ž๊นŒ์ง€ ์ž๋ฅด๊ณ  pos2 + 1 ~ ๋๊นŒ์ง€ ์ด๋ ‡๊ฒŒ ์„ธ ๊ตฌ๊ฐ„์œผ๋กœ ์ž๋ฅด๋Š” ๋ฐฉ๋ฒ•์„ ์ผ๋‹ค.

์ด๋•Œ, pos1๊ณผ pos2๋Š” find ํ•จ์ˆ˜๋ฅผ ์ด์šฉํ•ด์„œ ์ฐพ์„ ์ˆ˜ ์žˆ๋‹ค.

 

์ •๋‹ต์„ ๋งžํžŒ ํ›„์— ๋‹ค๋ฅธ ์‚ฌ๋žŒ์˜ ์ฝ”๋“œ๋ฅผ ํ•œ ๋ฒˆ ๋ดค๋”๋‹ˆ sstream์„ ์ด์šฉํ•˜๋‹ˆ๊นŒ ํ›จ์”ฌ ์‰ฝ๊ฒŒ ์ž…๋ ฅ์„ ๋ฐ›์„ ์ˆ˜ ์žˆ์—ˆ๋‹ค.

        stringstream ss(record[i]);
        string cmd, ID, Nic;
        ss >> cmd;
        ss >> ID;
        ss >> Nic;

๊ทธ๋ƒฅ ์ด๋ ‡๊ฒŒ๋งŒ ํ•˜๋ฉด record[i]์— ์žˆ๋Š” ๋ช…๋ น๋ฌธ์„ ๋„์›Œ์“ฐ๊ธฐ๋ฅผ ๊ธฐ์ค€์œผ๋กœ 3๊ฐœ๋ฅผ ๋ฐ›์„ ์ˆ˜ ์žˆ๋‹ค.

์—„์ฒญ ์œ ์šฉํ•œ ์ฝ”๋“œ์ธ ๋“ฏํ•˜๋‹ค.

 

  • ์œ ์ €๋ณ„๋กœ ๋‹‰๋„ค์ž„ ์ €์žฅ

์œ ์ €๊ฐ€ ๋‹‰๋„ค์ž„์„ ๋ณ€๊ฒฝํ•˜๋ฉด ์•ž์„œ ์ด๋ฏธ ์ƒ๊ฒจ์žˆ๋˜ ์ถœ์ž…๋ฉ”์„ธ์ง€์˜ ๋‹‰๋„ค์ž„๋ถ€๋ถ„๋„ ๋ณ€๊ฒฝ๋œ๋‹ค.

๊ทธ๋ ‡๊ธฐ ๋•Œ๋ฌธ์— ์œ ์ €๋ณ„๋กœ ์ตœ์ข…์ ์œผ๋กœ ๋ฐ”๋€ ๋‹‰๋„ค์ž„์„ ์•Œ๊ณ  ์žˆ์–ด์•ผํ•œ๋‹ค.

์œ ์ €์˜ ์•„์ด๋””๋Š” ๋ชจ๋‘ ๊ณ ์œ ํ•œ ์ •๋ณด์ด๊ธฐ ๋•Œ๋ฌธ์— map์„ ์ด์šฉํ–ˆ๋‹ค.

์œ ์ €์˜ ์•„์ด๋””๋ฅผ Key๋กœ ์œ ์ €์˜ ๋‹‰๋„ค์ž„์„ Value๋กœ ์ƒ๊ฐํ•˜๋ฉด ๋œ๋‹ค.

map<string, string> User_Nickname์ด๋ผ๋Š” ๋งต์„ ์„ ์–ธํ–ˆ๋‹ค.

 

  • ๋ฉ”์„ธ์ง€ ์ถœ๋ ฅ

record ์— ๋“ค์–ด์žˆ๋Š” ๋ช…๋ น๋ฌธ๋“ค ์ค‘์— Enter์™€ Leave์ธ ๊ฒฝ์šฐ์—๋งŒ ๋ฉ”์„ธ์ง€๋ฅผ ์ถœ๋ ฅํ•˜๋ฉด ๋œ๋‹ค.

๋‚˜๋Š” ์ถœ๋ ฅํ•ด์•ผํ•  ๋ฉ”์„ธ์ง€๋“ค์˜ ์ •๋ณด๋ฅผ ๊ฐ„๋žตํ•˜๊ฒŒ ํ์— ์ €์žฅํ•ด๋‘๊ณ  ํ•œ ๋ฒˆ์— ์ถœ๋ ฅํ•˜๋Š” ๋ฐฉ์‹์œผ๋กœ ํ–ˆ๋‹ค.

queue<pair<char, string>> ์„ ํ•ด์„œ ์ถœ๋ ฅํ•ด์•ผํ•  ๋ฉ”์„ธ์ง€๊ฐ€ Enter์ด๋ฉด 'E'๋ฅผ, Leave์ด๋ฉด 'L'์„ ํŽ˜์–ด์˜ ์ฒซ๋ฒˆ์งธ์— ๋„ฃ๊ณ , ํ•ด๋‹น ์œ ์ €์˜ ID๋ฅผ ํŽ˜์–ด์˜ ๋‘๋ฒˆ์งธ์— ๋„ฃ์—ˆ๋‹ค.

๊ทธ๋Ÿฐ๋ฐ ๊ตณ์ด ์ด๋ ‡๊ฒŒ ์•ˆํ•˜๊ณ  record๋ฅผ ๋‹ค์‹œ ๋Œ๋ฉด์„œ ๋ช…๋ น์–ด๊ฐ€ Enter ๋˜๋Š” Leave์ธ ๊ฒฝ์šฐ์—๋งŒ answer๋ฒกํ„ฐ์— ๋ฉ”์„ธ์ง€๋ฅผ ์ง‘์–ด๋„ฃ์–ด๋„ ๋  ๊ฒƒ๊ฐ™๋‹ค.

์ด๋ ‡๊ฒŒ ํ•˜๋ฉด ๊ตณ์ด ํ๋ฅผ ๋งŒ๋“ค์ง€ ์•Š์•„๋„ ๋œ๋‹ค.

 

 
#include <string>
#include <vector>
#include <iostream>
#include <map>
#include <queue>
#include <sstream>
using namespace std;
const int MAX_N = 100000 + 5;
queue<pair<char, string>> q;
 
vector<string> solution(vector<string> record) {
    vector<string> answer;
    map<string, string> User_NickName;
    for (int i = 0; i < record.size(); i++) {
        stringstream ss(record[i]);
        string cmd, ID, Nic;
        ss >> cmd;
        ss >> ID;
        ss >> Nic;
        if (cmd == "Enter") {
            User_NickName[ID] = Nic;
            q.push({ 'E',ID });
        }
        else if (cmd == "Change")
            User_NickName[ID] = Nic;
        else if (cmd == "Leave") {
            q.push({ 'L',ID });
        }
    }
    while (!q.empty()) {
        char cmd = q.front().first;
        string ID = q.front().second;
        q.pop();
        string temp = "";
        temp += User_NickName[ID];
        temp += "๋‹˜์ด ";
        if (cmd == 'E')
            temp += "๋“ค์–ด์™”์Šต๋‹ˆ๋‹ค.";
        else if (cmd == 'L')
            temp += "๋‚˜๊ฐ”์Šต๋‹ˆ๋‹ค.";
        answer.push_back(temp);
    }
    return answer;
}
cs

 

728x90