티스토리 뷰

leetcode.com/problems/subdomain-visit-count/submissions/

 

Subdomain Visit Count - LeetCode

Level up your coding skills and quickly land a job. This is the best place to expand your knowledge and get prepared for your next interview.

leetcode.com

웹 사이트 도메인, 서브도메인의 방문횟수 를 구하는 문제이다.

Input값으로 문자열 배열이 주어진다.

원소 하나에는 도메인과 도메인의 방문횟수가 띄어쓰기로 구분한 하나의 문자열로 주어진다.

그리고 배열의 각 원소에서 도메인, 서브 도메인에 대한 총 방문횟수를 구해서 배열로 return 해주면 된다.  

 

ex)

1. 

input : ["9001 discuss.leetcode.com"]

output : ["9001 discuss.leetcode.com", "9001 leetcode.com", "9001 com"]

 

2.

input : ["900 google.mail.com", "50 yahoo.com", "1 intel.mail.com", "5 wiki.org"]

output : ["901 mail.com","50 yahoo.com","900 google.mail.com","5 wiki.org","5 org","1 intel.mail.com","951 com"]

 

class Solution {
public:
    vector<string> subdomainVisits(vector<string>& cpdomains) {
        map<string, int> subDomain;
        string tmp;
        for (int i = 0; i < cpdomains.size(); i++) {
            vector<string> streamArr;
            streamArr.clear();
            streamArr = splitString(cpdomains[i], ' ');

            vector<string> piece;
            piece.clear();
            piece = splitString(streamArr[1], '.');
            reverse(piece.begin(), piece.end());
            tmp = "";
            for (int j = 0; j < piece.size(); j++) {
                if (j == 0) tmp = piece[j];
                else tmp = piece[j] + '.' + tmp;
                if (subDomain.find(tmp) == subDomain.end()) {
                    subDomain.insert(pair<string, int>(tmp, stoi(streamArr[0])));
                }
                else {
                    subDomain.find(tmp)->second = subDomain.find(tmp)->second + stoi(streamArr[0]);
                }
            }
        }
        vector<string> answer;
        for (map<string, int>::iterator it = subDomain.begin(); it != subDomain.end(); it++) {
            answer.push_back(to_string(it->second) + " " + it->first);
        }

        return answer;
    }
    vector<string> splitString(string object, char delimeter) {
        vector<string> re;
        re.clear();
        string buffer;
        istringstream ss(object);
        while (getline(ss, buffer, delimeter)) {
            re.push_back(buffer);
        }
        return re;
    }
};

문제 풀이

먼저 input배열을 받으면 공백문자 기준으로 나누어 배열로 만든다

그리고 공백문자로 나눈 배열의 2번째 문자열을 다시 '.'을 기준으로 나누어 배열로 만든다.

그리고 해당 배열을 거꾸로 뒤집는다.

"discuss.leetcode.com"라는 문자열이 있다면, com, leetcode, discuss 라는 순서로 오게된다.

그런 다음 배열을 순차적으로 진행시키며 com에 대한 방문횟수, leetcode.com에 대한 방문횟수, discuss에 대한 방문횟수를 <도메인명, 방문횟수>의 형태로 map에 담는다. 만약 도메인 명이 중복된다면 기존 방문횟수에서 새로받은 방문횟수를 증가시켜서 저장시킨다.

그리고 해당 map으로 다시 return규칙에 따른 배열을 만들어 return하면 끝.

 

 

공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/07   »
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
글 보관함