πŸ”₯ PS(Problem Solving) πŸ”₯/programmers

[ν”„λ‘œκ·Έλž˜λ¨ΈμŠ€] #42889 μ‹€νŒ¨μœ¨

dar0m! 2019. 9. 9. 23:16

2018λ…„ KAKAO BLIND RECRUITMENT

 

μ½”λ”©ν…ŒμŠ€νŠΈ μ—°μŠ΅ - μ‹€νŒ¨μœ¨ | ν”„λ‘œκ·Έλž˜λ¨ΈμŠ€

μ‹€νŒ¨μœ¨ 슈퍼 κ²Œμž„ 개발자 μ˜€λ λ¦¬λŠ” 큰 고민에 λΉ μ‘Œλ‹€. κ·Έλ…€κ°€ λ§Œλ“  ν”„λžœμ¦ˆ μ˜€μ²œμ„±μ΄ λŒ€μ„±κ³΅μ„ κ±°λ’€μ§€λ§Œ, μš”μ¦˜ μ‹ κ·œ μ‚¬μš©μžμ˜ μˆ˜κ°€ κΈ‰κ°ν•œ 것이닀. 원인은 μ‹ κ·œ μ‚¬μš©μžμ™€ κΈ°μ‘΄ μ‚¬μš©μž 사이에 μŠ€ν…Œμ΄μ§€ 차이가 λ„ˆλ¬΄ 큰 것이 λ¬Έμ œμ˜€λ‹€. 이 문제λ₯Ό μ–΄λ–»κ²Œ ν• κΉŒ κ³ λ―Ό ν•œ κ·Έλ…€λŠ” λ™μ μœΌλ‘œ κ²Œμž„ μ‹œκ°„μ„ λŠ˜λ €μ„œ λ‚œμ΄λ„λ₯Ό μ‘°μ ˆν•˜κΈ°λ‘œ ν–ˆλ‹€. μ—­μ‹œ 슈퍼 개발자라 λŒ€λΆ€λΆ„μ˜ λ‘œμ§μ€ μ‰½κ²Œ κ΅¬ν˜„ν–ˆμ§€λ§Œ, μ‹€νŒ¨μœ¨μ„ κ΅¬ν•˜λŠ” λΆ€λΆ„μ—μ„œ μœ„κΈ°μ— λΉ μ§€κ³  λ§μ•˜λ‹€. 였렐리λ₯Ό μœ„ν•΄ μ‹€νŒ¨μœ¨μ„ κ΅¬ν•˜λŠ” μ½”λ“œλ₯Ό

programmers.co.kr

 

문제

μ‹€νŒ¨μœ¨μ„ κ΅¬ν•˜λŠ” μ½”λ“œλ₯Ό μ™„μ„±ν•˜λΌ.

  • μ‹€νŒ¨μœ¨μ€ λ‹€μŒκ³Ό 같이 μ •μ˜ν•œλ‹€.
    • μŠ€ν…Œμ΄μ§€μ— λ„λ‹¬ν–ˆμœΌλ‚˜ 아직 ν΄λ¦¬μ–΄ν•˜μ§€ λͺ»ν•œ ν”Œλ ˆμ΄μ–΄μ˜ 수 / μŠ€ν…Œμ΄μ§€μ— λ„λ‹¬ν•œ ν”Œλ ˆμ΄μ–΄ 수

전체 μŠ€ν…Œμ΄μ§€μ˜ 개수 N, κ²Œμž„μ„ μ΄μš©ν•˜λŠ” μ‚¬μš©μžκ°€ ν˜„μž¬ λ©ˆμΆ°μžˆλŠ” μŠ€ν…Œμ΄μ§€μ˜ λ²ˆν˜Έκ°€ λ‹΄κΈ΄ λ°°μ—΄ stagesκ°€ λ§€κ°œλ³€μˆ˜λ‘œ μ£Όμ–΄μ§ˆ λ•Œ, μ‹€νŒ¨μœ¨μ΄ 높은 μŠ€ν…Œμ΄μ§€λΆ€ν„° λ‚΄λ¦Όμ°¨μˆœμœΌλ‘œ μŠ€ν…Œμ΄μ§€μ˜ λ²ˆν˜Έκ°€ λ‹΄κ²¨μžˆλŠ” 배열을 return ν•˜λ„λ‘ solution ν•¨μˆ˜λ₯Ό μ™„μ„±ν•˜λΌ.

풀이

μ œν•œμ‚¬ν•­μ„ μ œλŒ€λ‘œ λͺ» 보고 ν’€μ–΄μ„œ ν‹€λ Έμ—ˆλ‹€.

μŠ€ν…Œμ΄μ§€μ— λ„λ‹¬ν•œ μœ μ €κ°€ μ—†λŠ” 경우 ν•΄λ‹Ή μŠ€ν…Œμ΄μ§€μ˜ μ‹€νŒ¨μœ¨μ€ 0 μœΌλ‘œ μ •μ˜ν•œλ‹€.

이 뢀뢄이 μžˆλŠ”λ° 틀렸을 λ•Œμ˜ λ‘œμ§μ€ λ„λ‹¬ν•œ μŠ€ν…Œμ΄μ§€ λ²ˆν˜Έλ“€ 쀑 κ°€μž₯ 큰 것을 Max라고 두고 v λΌλŠ” vector 객체에 넣을 λ•Œ MaxλΆ€ν„° μˆœνšŒν•˜λ„λ‘ ν–ˆμ—ˆλ‹€.

ν•˜μ§€λ§Œ 이 뢀뢄은 μ˜ˆμ œκ°€ μ•„λž˜μ™€ 같이 λ‚˜μ™€ μžˆμ„ λ•ŒλŠ”

#testcase
7
1,2,3,4,5,6

μ˜ˆμƒ λ‹΅μ•ˆμ΄ [6,5,4,3,2,1,7] μ΄μ§€λ§Œ 7이 좜λ ₯λ˜μ§€ μ•ŠλŠ” ν˜„μƒμ΄ λ°œμƒν•œλ‹€. λ”°λΌμ„œ Maxλ₯Ό N으둜 μ΄ˆκΈ°ν™” μ‹œμΌœλ‘κ³  λ°˜λ³΅λ¬Έμ„ 돌 λ•Œ Max보닀 큰 μŠ€ν…Œμ΄μ§€ λ²ˆν˜Έκ°€ λ‚˜μ˜€λ©΄ κ°±μ‹ μ‹œν‚€ 도둝 μˆ˜μ •ν•˜λ‹ˆ 맞좜수 μžˆμ—ˆλ‹€.

 

μ½”λ“œ

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
#include <algorithm>
#include <vector>
using namespace std;
typedef pair<doubleint> p;
 
bool cmp(p a, p b) {
    if (a.first == b.first) {
        return a.second < b.second;
    }
    return a.first > b.first;
}
 
vector<int> solution(int N, vector<int> stages) {
    vector<int> answer;
    vector<p> v;
    int arr[502= { 0 }, Max = N;
    for (int i = 0; i < stages.size(); i++) {
        arr[stages[i]]++;
        Max = stages[i] > Max ? stages[i] : Max;
    }
    int people = 0;
    for (int i = Max; i > 0; i--) {
        people += arr[i];
        if (i <= N) {
            if (!arr[i])v.push_back({ 0, i });
            else v.push_back({ ((double)arr[i] / people), i });
        }
    }
    sort(v.begin(), v.end(), cmp);
    for (int i = 0; i < v.size(); i++) {
        answer.push_back(v[i].second);
    }
    return answer;
}
 
int main() {
    solution(5, { 21262433 });
    return 0;
 
}
cs