๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
๐Ÿš“ Self Study/๐Ÿ”“ Programmers

ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค (ํŠœํ”Œ, 2019 ์นด์นด์˜ค ๊ฐœ๋ฐœ์ž ๊ฒจ์šธ ์ธํ„ด์‹ญ) C++

by UKHYUN22 2022. 1. 1.
728x90

 

ํ•˜๋‚˜์˜ ๋ฌธ์ž์—ด์„ ์ฝค๋งˆ์™€ ์ค‘๊ด„ํ˜ธ๋ฅผ ๊ตฌ๋ถ„ํ•˜์—ฌ ์ˆซ์ž๋กœ ์ธ์‹ํ•  ์ˆ˜ ์žˆ๊ณ  ๋˜ ๊ฐ€์žฅ ๊ธด ๋ฐฐ์—ด์˜ ์ˆœ์„œ๋ฅผ ๊ฐ€์ ธ์˜ค๋ฉด ๊ฐ€๋Šฅํ•˜๋‹ค๊ณ  ์ƒ๊ฐํ•ด์„œ ์ด๋ ‡๊ฒŒ ์ ‘๊ทผํ•ด์„œ ํ’€์—ˆ๋‹ค. ํ•˜์ง€๋งŒ answer์˜ ์ •๋ ฌ ์ˆœ์„œ๋Š” ํ•ด๋‹น ์ˆซ์ž๊ฐ€ ์–ผ๋งˆ๋‚˜ ๋ฐ˜๋ณต๋˜์–ด์„œ ๋‚˜์™”๋Š”์ง€๋ฅผ ๊ธฐ์ค€์œผ๋กœ ํ–ˆ๋‹ค.

์ด๋Š” Map์„ ์ด์šฉํ•ด์„œ value์˜ ๊ฐ’์„ ๊ณ„์†์ ์œผ๋กœ count๋ฅผ ์‹œ์ผœ์„œ ์ €์žฅํ•ด์•ผ ํ–ˆ๋‹ค. 

1. map<int,int> map ์„ ์„ ์–ธํ•˜๊ณ  ์‚ฌ์šฉํ•  ๋•Œ value๊ฐ’์ด 0์œผ๋กœ ์ดˆ๊ธฐํ™”๊ฐ€ ๋˜๋Š”์ง€๊ฐ€ ๊ถ๊ธˆํ–ˆ๋‹ค.

-> 0์œผ๋กœ ์ดˆ๊ธฐ๊ฐ’์ด ๊ธฐ๋ณธ ์„ค์ •๋˜์–ด ์žˆ๋‹ค.

2. sort(map.begin(), map.end())๋ฅผ ํ†ตํ•ด์„œ value ์˜ ์˜ค๋ฆ„์ฐจ์ˆœ, ๋‚ด๋ฆผ์ฐจ์ˆœ์œผ๋กœ ์ •๋ ฌ์‹œํ‚ฌ ๋ฐฉ๋ฒ•์ด ์กด์žฌํ•˜๋Š”๊ฐ€

-> vector<pair<int,Int>>๋กœ ๋ณต์‚ฌํ•œ ํ›„ sort๊ฐ€ ๊ฐ€๋Šฅํ•˜๋‹ค

 

ํ•™๊ต ๊ณผ์ œ์—์„œ ์ˆ˜ํ–‰ํ–ˆ์—ˆ๋˜ ๋ฌธ์ž์—ด ๊ตฌ๋ถ„ํ•˜๋Š” ๊ฒƒ๋ณด๋‹ค ๋ณต์žกํ•˜์ง€ ์•Š์•„์„œ ๊ตฌ๋ถ„ํ•˜๋Š” ๊ฒƒ์€ ๊ธˆ๋ฐฉ ํ•ด๊ฒฐํ–ˆ๋‹ค. ์•ž์œผ๋กœ๋Š” vector ๋กœ ๋ชจ๋“  ๊ฒƒ์„ ํ•ด๊ฒฐํ•˜๋ ค ์ƒ๊ฐํ•˜์ง€ ๋ง๊ณ , ์ค‘๋ณต๋˜๋Š” ๊ฒƒ์„ ์–ด๋–ป๊ฒŒ ์„ธ์ค„๊นŒ? --> map์„ ์ด์šฉํ•ด์„œ ํ•ด๊ฒฐ ๋“ฑ๋“ฑ ์•Œ๊ณ ๋ฆฌ์ฆ˜์˜ ํ–‰๋™ ์˜์—ญ์„ ๊ธฐ๋กํ•˜๋ฉด์„œ ๊ณต๋ถ€ํ•ด์•ผํ•  ๊ฒƒ ๊ฐ™๋‹ค.

 

#include <string>
#include <vector>
#include <cstdlib>
#include <iostream>
#include <algorithm>
#include <map>

using namespace std;

bool cmp(const pair<int,int>& a, const pair<int,int>& b){
    // ๋‘ ๊ฐ€์ง€์˜ pair๊ฐ€ ๋“ค์–ด์˜ค๋ฉด second ์ค‘ ํฐ ๊ฒƒ์„ ๋ฐ˜ํ™˜ํ•œ๋‹ค. (๋‚ด๋ฆผ์ฐจ์ˆœ)
    // ๊ฐ™์€ ๊ฒฝ์šฐ first ๊นŒ์ง€ ์ฒ˜๋ฆฌ๋ฅผ ํ•ด์ค˜์•ผ ํ•จ์ˆ˜๊ฐ€ ๋Œ์•„๊ฐ„๋‹ค.
    if(a.second == b.second) return a.first > b.first;
    return a.second > b.second;
}

vector<int> solution(string s) {
    vector<int> answer;
    map<int,int> map;
    int index = 0;
    
    // ๋ฌธ์ž์—ด์„ ๋Œ๋ฉด์„œ ๋ฒˆํ˜ธ๋ฅผ ์ธ์ง€ํ•ด์•ผ ํ•œ๋‹ค.
    for(int i = 2 ; i < s.size() - 1 ; i++) {
        
        // ํ˜„์žฌ ๋ฌธ์ž๊ฐ€ ๋‹ค์Œ์ด ์•„๋‹Œ ๊ฒฝ์šฐ ์ˆซ์ž์ด๋ฏ€๋กœ ์ €์žฅ์„ ํ•ด์•ผ ํ•œ๋‹ค.
        if(s[i] != '}' && s[i] != ',' && s[i] != '{') {
            
            // ์ˆซ์ž๊ฐ€ ํ•œ ์ž๋ฆฌ ์ˆซ์ž ์ธ ๊ฒฝ์šฐ
            if(s[i+1] == ',' || s[i+1] == '}')
                // map์— ํ•ด๋‹น ์ˆซ์ž๊ฐ€ ๋ช‡ ๋ฒˆ ๋“ค์–ด๊ฐ”๋Š”์ง€ count ํ•ด์ค€๋‹ค.
                map[s[i] - '0']++;
            
            // ์ˆซ์ž๊ฐ€ ๋‘ ์ž๋ฆฌ ์ˆ˜ ์ด์ƒ์ธ ๊ฒฝ์šฐ
            else {
                int j = i + 1;
                int cut = 0;
                
                // 2์ž๋ฆฌ ์ด์ƒ ์ˆซ์ž๊ฐ€ ์–ธ์ œ๊นŒ์ง€ ๋ฐ˜๋ณต๋˜๋Š”์ง€ ์„ธ์ค€๋‹ค.
                while(true) {
                    if(s[j] == ',' || s[j] == '}') {
                        cut = j;
                        break;
                    }
                    j++;
                }
                
                // ๊ทธ ๋ฌธ์ž์—ด์„ substr์„ ์ด์šฉํ•ด ์ž˜๋ผ์ค€๋‹ค.
                string number = s.substr(i, cut-i);
                
                // map์— ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ stoi ํ•จ์ˆ˜๋ฅผ ์ด์šฉํ•ด์„œ ์ €์žฅํ•œ๋‹ค.
                map[stoi(number)]++;
                
                // ๋ฐ˜๋ณต๋ฌธ์„ ์ž๋ฅธ ๋งŒํผ ๋‹ค์‹œ ์‹œ์ž‘ํ•˜๊ธฐ ์œ„ํ•ด 1๋งŒํผ ๋นผ์ค€๋‹ค.
                i = cut-1;
            }
        }
        
    }
    
    // map์˜ value ๋กœ ์ •๋ ฌํ•˜๊ธฐ ์œ„ํ•ด์„œ pair<int,int> ๋ฒกํ„ฐ์— ๋‹ด์•„์ค€๋‹ค.
    vector<pair<int,int>> temp(map.begin(), map.end());
    
    // cmp ํ•จ์ˆ˜๋ฅผ ํ†ตํ•ด์„œ value ๊ฐ’์œผ๋กœ ๋น„๊ต๋ฅผ ํ•ด์ค€๋‹ค.
    sort(temp.begin(), temp.end(), cmp);
    
    for(auto cnt : temp)
        answer.push_back(cnt.first);

    return answer;
}

 

 

์ด๊ฑด ๋ฌธ์ž์—ด์„ 2์ค‘ ๋ฐฐ์—ด๋กœ ๋ฝ‘์•„๋‚ด๊ธฐ๊นŒ์ง€ ์„ฑ๊ณตํ•˜๊ณ  answer๊ฐ€ ๋งŽ์ด count๋œ ๊ฒƒ์œผ๋กœ ์ •๋ ฌ๋จ์„ ๋ชจ๋ฅด๊ธฐ ์ „๊นŒ์ง€์˜ ์ž‘์—…๊ณผ์ •

 

#include <string>
#include <vector>
#include <cstdlib>
#include <iostream>

using namespace std;

vector<int> solution(string s) {
    vector<int> answer;
    vector<vector<int>> arr(s.size());
    int index = 0;
    
    for(int i = 2 ; i < s.size() - 1 ; i++) {
        if(s[i] == '}' && ( s[i+1] == ',' || s[i+1] == '}')) {
            index++;
            continue;
        }
        
        if(s[i] != '}' && s[i] != ',' && s[i] != '{') {
            // ์ˆซ์ž๊ฐ€ ํ•œ ์ž๋ฆฌ ์ˆซ์ž ์ธ ๊ฒฝ์šฐ
            if(s[i+1] == ',' || s[i+1] == '}')
                arr[index].push_back(s[i] - '0');
            
            // ์ˆซ์ž๊ฐ€ ๋‘ ์ž๋ฆฌ ์ˆ˜ ์ด์ƒ์ธ ๊ฒฝ์šฐ
            else {
                int j = i + 1;
                int cut = 0;
                while(true) {
                    if(s[j] == ',' || s[j] == '}') {
                        cut = j;
                        break;
                    }
                    j++;
                }
                
                string number = s.substr(i, cut-i);
                //cout << stoi(number) << endl;
                arr[index].push_back(stoi(number));
                i = cut-1;
            }
        }
        
    }
    int max = 0;
    
    for(int i = 0 ; i < arr.size() ; i++) {
        if(max < arr[i].size()) {
            max = i;
        }
    }
    cout << max;
    for(int i = 0 ; i < arr[max].size() ; i++) {
        answer.push_back(arr[max][i]);
    }
    return answer;
}