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

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

<풀이>

1. 주어진 명령(문자열)을 해독하여 각각 유저 아이디와 닉네임을 매칭한다.

2. 명령에 맞는 출력물을 결과에 저장한다.

<해법>

1. 문자열을 해독하는 방법.

=> 각 문자열은 공백으로 구분되어 있다고 합니다. 그렇다면, 문자열에서 공백까지 문자는 각각의 정보를 담고있다고 해석할 수 있습니다.

예를들어 "Enter uid1234 Muzi"의 문자열을 탐색할 때, 앞에서부터 공백이 나오기 전까지 한 문자씩 검사합니다.

E -> n -> t -> e -> r -> ' ' // 공백 발견

공백을 발견하였을 시 그 전까지 문자들 Enter을 저장합니다.

위와 같은 수행을 반복하면 Enter, uid1234, Muzi를 나눌 수 있습니다.

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
57
58
59
#include <iostream>
#include <vector>
#include <string>
#include <map>
using namespace std;
 
struct message {
    string cmd;
    string user_id;
};
 
vector<string> solution(vector<string> record) {
 
    vector<string> answer;
 
    map<stringstring> user;
    vector<message> v;
 
    for (int i = 0; i < record.size(); i++) {
 
        //문자열 분리
        //tmpV[0] : Enter or Leave or tmpV, tmpV[1] : uidXXXX, tmpV[2] : nickname
        vector<string> tmpV;
        string tmp = "";
        for (int j = 0; j < record[i].length(); j++) {
            if (record[i][j] == ' ') {
                tmpV.push_back(tmp);
                tmp = "";
            }
            else {
                tmp += record[i][j];
            }
        }
        tmpV.push_back(tmp);
 
        //명령 수행
        if (tmpV[0== "Enter") {
            user[tmpV[1]] = tmpV[2];
            v.push_back({ "Enter",tmpV[1] });
        }
        else if (tmpV[0== "Leave") {
            v.push_back({ "Leave", tmpV[1] });
        }
        else {
            user[tmpV[1]] = tmpV[2];
        }
    }
 
    //결과값 저장
    for (int i = 0; i < v.size(); i++) {
        if (v[i].cmd == "Enter") {
            answer.push_back(user[v[i].user_id] + "님이 들어왔습니다.");
        }
        else {
            answer.push_back(user[v[i].user_id] + "님이 나갔습니다.");
        }
    }
    return answer;
}
 

 

문자열 파싱에 대해 알아볼 수 있는 문제였습니다.

+ Recent posts