강의로 돌아가기
bittersweet-dev

std::map 라이브러리를 사용해도 상관없나요?

안녕하세요.

tree 구조를 사용하지 않고 했을 때 데이터가 큰 것들은 시간 초과해버려서,
직접 tree 구조를 코딩 하자니 손이 많이 갈 것 같기에 std::map 라이브러리를 이용해서 정답 처리를 받았는데요...

제공된 코드에는 std::vector 만 포함되어있어서 map을 사용해도 되는지 궁금합니다.

또는 2018년도 코딩테스트 전반적인 제약사항이나 규정같은 것을 확인해볼 수 있나요?

작성중인 코드―solution.cpp
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
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
#include <string>
#include <vector>
#include <map>

using namespace std;

typedef map<string, string> Map;
typedef pair<string, string> Node;

void Parse(vector<string> & record, Map & m) {
    for(auto r : record) {
        string s0, s1, s2;

        int start = 0;
        int order = 0;
        for(int i = 0; i < r.size(); i++) {
            if (r[i] == ' ') {
                if (order == 0) {
                    s0 = r.substr(start, i - start);
                    s1 = r.substr(i + 1);
                }
                if (order == 1) {
                    s1 = r.substr(start, i - start);
                    s2 = r.substr(i + 1);
                }
                start = i + 1;
                order++;
            }
        }

        if (s0 == "Enter" || s0 == "Change") {
            Map::iterator it = m.find(s1);
            if (it == m.end()) {
                m.insert(Node(s1, s2));
            }
            else {
                it->second = s2;
            }
        }
    }
}

vector<string> Print(vector<string> & record, Map & m) {
    vector<string> answer;
    for(auto r : record) {
        string s0, s1, s2;

        int start = 0;
        int order = 0;
        for(int i = 0; i < r.size(); i++) {
            if (r[i] == ' ') {
                if (order == 0) {
                    s0 = r.substr(start, i - start);
                    s1 = r.substr(i + 1);
                }
                if (order == 1) {
                    s1 = r.substr(start, i - start);
                    s2 = r.substr(i + 1);
                }
                start = i + 1;
                order++;
            }
        }

        if (s0 == "Enter") answer.push_back(m.find(s1)->second + "님이 들어왔습니다.");
        if (s0 == "Leave") answer.push_back(m.find(s1)->second + "님이 나갔습니다.");
    }
    return answer;
}

vector<string> solution(vector<string> record) {
    vector<string> answer;
    Map m;

    Parse(record, m);

    return answer = Print(record, m);
}
0 개의 답변
답변 쓰기
이 입력폼은 마크다운 문법을 지원합니다. 마크다운 가이드 를 참고하세요.