관리 메뉴

Partially Committed

[2019 KAKAO BLIND RECRUITMENT] μ‹€νŒ¨μœ¨ λ³Έλ¬Έ

πŸ”₯ Algorithm || λ¬Έμ œν’€μ΄/PS

[2019 KAKAO BLIND RECRUITMENT] μ‹€νŒ¨μœ¨

WonderJay 2022. 7. 4. 01:17
728x90
λ°˜μ‘ν˜•
SMALL

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

 

μ½”λ”©ν…ŒμŠ€νŠΈ μ—°μŠ΅ - μ‹€νŒ¨μœ¨

μ‹€νŒ¨μœ¨ 슈퍼 κ²Œμž„ 개발자 μ˜€λ λ¦¬λŠ” 큰 고민에 λΉ μ‘Œλ‹€. κ·Έλ…€κ°€ λ§Œλ“  ν”„λžœμ¦ˆ μ˜€μ²œμ„±μ΄ λŒ€μ„±κ³΅μ„ κ±°λ’€μ§€λ§Œ, μš”μ¦˜ μ‹ κ·œ μ‚¬μš©μžμ˜ μˆ˜κ°€ κΈ‰κ°ν•œ 것이닀. 원인은 μ‹ κ·œ μ‚¬μš©μžμ™€ κΈ°μ‘΄ μ‚¬μš©μž 사이에 슀

programmers.co.kr

hash table 에 < μŠ€ν…Œμ΄μ§€, μ‹€νŒ¨μœ¨ > 을 insert ν•œ λ’€, μ‹€νŒ¨μœ¨μ— λ”°λΌμ„œ μ •λ ¬ν•˜μ—¬ answer 에 μ μ ˆν•œ 값을 push ν•œλ‹€.

 

challenge λ°°μ—΄μ—λŠ” 각각의 μŠ€ν…Œμ΄μ§€μ— λŒ€ν•˜μ—¬ 도전을 ν–ˆλ‹€λ©΄(거쳐왔닀면) ν•˜λ‚˜μ”© μ¦κ°€ν•œλ‹€.

예λ₯Ό λ“€μ–΄, stage 배열이 [2, 1, 2, 6, 2, 4, 3, 3] 인 κ²½μš°μ—λŠ” challenge[1] = 8 (μŠ€ν…Œμ΄μ§€ 1 은 8 λͺ…이 λͺ¨λ‘ μ§€λ‚˜κ°”μœΌλ―€λ‘œ), challenge[2] = 7 (μŠ€ν…Œμ΄μ§€ 2 λŠ” 7 λͺ…이 κ±°μ³κ°”μœΌλ―€λ‘œ) 이닀.

 

num λ°°μ—΄μ—λŠ” 각각의 μŠ€ν…Œμ΄μ§€μ— λ¨Έλ¬Όκ³  μžˆλŠ” μ‚¬λžŒμ˜ 개수λ₯Ό μ €μž₯ν•œλ‹€.

예λ₯Ό λ“€μ–΄, stage 배열이 [2, 1, 2, 6, 2, 4, 3, 3] 인 κ²½μš°μ—λŠ” num[1] = 1, num[2] = 3 ... 이닀.

 

그러면 μ‹€νŒ¨μœ¨μ€ num[i]/challenge[i] 둜 μ •μ˜ν•  수 μžˆλŠ”λ° μ΄λ•Œ μ£Όμ˜ν•΄μ•Όν•  점은 challenge[i] κ°€ 0 일 수 μžˆλ‹€λŠ” 것이닀. 이에 λŒ€ν•œ μ˜ˆμ™Έμ²˜λ¦¬λ₯Ό ν•΄μ£Όμ–΄μ•Ό ν•˜λŠ” 것에 μ£Όμ˜ν•˜μž.

 

μœ„μ™€ 같이 μ‹€νŒ¨μœ¨μ„ κ΅¬ν•˜λ©΄, < μŠ€ν…Œμ΄μ§€, μ‹€νŒ¨μœ¨ > μ›μ†Œλ₯Ό hash table 에 μ €μž₯ν•œλ‹€. 그리고 pair<int, double> 을 μ›μ†Œλ‘œ κ°€μ§€λŠ” vector 인 temp λ₯Ό μ΄μš©ν•˜μ—¬ hash table 을 μ •λ ¬ν•œλ‹€. μ΄λ•Œ λžŒλ‹€ ν•¨μˆ˜λ₯Ό μ΄μš©ν•˜μ—¬ comp ν•¨μˆ˜λ₯Ό μ •μ˜ν•˜λŠ”λ°, μ‹€νŒ¨μœ¨μ΄ κ°™λ‹€λ©΄ μŠ€ν…Œμ΄μ§€μ˜ 이름을 μ˜€λ¦„μ°¨μˆœμœΌλ‘œ μ •λ ¬ν•˜κ³  μ‹€νŒ¨μœ¨μ΄ λ‹€λ₯΄λ©΄ μ‹€νŒ¨μœ¨μ— λ”°λ₯Έ λ‚΄λ¦Όμ°¨μˆœμœΌλ‘œ μ •λ ¬λ˜λ„λ‘ μ„€μ •ν•œλ‹€. 이후 μ •λ ¬λœ temp λ°°μ—΄μ˜ μ›μ†Œ 쀑 stage 에 ν•΄λ‹Ήν•˜λŠ” 값을 answer 배열에 차곑차곑 μ €μž₯ν•˜λ©΄ λœλ‹€.

 

 

[C++]

#include <string>
#include <vector>
#include <algorithm>
#include <unordered_map>

using namespace std;

vector<int> solution(int N, vector<int> stages) {
    vector<int> answer;
    vector<int> challenge(N+1, 0);
    vector<int> num(N+1, 0);
    unordered_map<int, double> h_map;

    for (int i = 0; i < stages.size(); i++)
    {
        for (int j = stages[i]; j > 0; j--)
        {
            challenge[j]++;
        }
        num[stages[i]]++;
    }

    for (int i = 1; i <= N; i++)
    {
        h_map[i] = 0.0;
        if (challenge[i] != 0)
        {
            h_map[i] = (double)num[i] / (double)challenge[i];
        }
    }


    vector<pair<int, double>> temp(h_map.begin(), h_map.end());
    sort(temp.begin(), temp.end(), [](pair<int, double> a, pair<int, double> b)
        {
            if (a.second == b.second)
            {
                return a.first < b.first;
            }
            return a.second > b.second;
        });


    for (int i = 0; i < temp.size(); i++)
    {
        answer.push_back(temp[i].first);
    }
    return answer;
}

728x90
λ°˜μ‘ν˜•
LIST
Comments