πŸ’»

[ν”„λ‘œκ·Έλž˜λ¨ΈμŠ€][2019 KAKAO λΈ”λΌμΈλ“œ μ±„μš©] μ‹€νŒ¨μœ¨ λ³Έλ¬Έ

μ•Œκ³ λ¦¬μ¦˜/λ¬Έμ œν’€μ΄ Programmers

[ν”„λ‘œκ·Έλž˜λ¨ΈμŠ€][2019 KAKAO λΈ”λΌμΈλ“œ μ±„μš©] μ‹€νŒ¨μœ¨

λ˜νš¨λ‹ˆ 2020. 4. 11. 20:15

문제 μ„€λͺ…

μ‹€νŒ¨μœ¨

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

이 문제λ₯Ό μ–΄λ–»κ²Œ ν• κΉŒ κ³ λ―Ό ν•œ κ·Έλ…€λŠ” λ™μ μœΌλ‘œ κ²Œμž„ μ‹œκ°„μ„ λŠ˜λ €μ„œ λ‚œμ΄λ„λ₯Ό μ‘°μ ˆν•˜κΈ°λ‘œ ν–ˆλ‹€. μ—­μ‹œ 슈퍼 개발자라 λŒ€λΆ€λΆ„μ˜ λ‘œμ§μ€ μ‰½κ²Œ κ΅¬ν˜„ν–ˆμ§€λ§Œ, μ‹€νŒ¨μœ¨μ„ κ΅¬ν•˜λŠ” λΆ€λΆ„μ—μ„œ μœ„κΈ°μ— 빠지고 λ§μ•˜λ‹€. 였렐리λ₯Ό μœ„ν•΄ μ‹€νŒ¨μœ¨μ„ κ΅¬ν•˜λŠ” μ½”λ“œλ₯Ό μ™„μ„±ν•˜λΌ.

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

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

μ œν•œμ‚¬ν•­

  • μŠ€ν…Œμ΄μ§€μ˜ 개수 N은 1 μ΄μƒ 500 μ΄ν•˜μ˜ μžμ—°μˆ˜μ΄λ‹€.
  • stages의 κΈΈμ΄λŠ” 1 μ΄μƒ 200,000 μ΄ν•˜μ΄λ‹€.
  • stagesμ—λŠ” 1 μ΄μƒ N + 1 μ΄ν•˜μ˜ μžμ—°μˆ˜κ°€ λ‹΄κ²¨μžˆλ‹€.
    • 각 μžμ—°μˆ˜λŠ” μ‚¬μš©μžκ°€ ν˜„μž¬ 도전 쀑인 μŠ€ν…Œμ΄μ§€μ˜ 번호λ₯Ό λ‚˜νƒ€λ‚Έλ‹€.
    • 단, N + 1 μ€ λ§ˆμ§€λ§‰ μŠ€ν…Œμ΄μ§€(N 번째 μŠ€ν…Œμ΄μ§€) κΉŒμ§€ 클리어 ν•œ μ‚¬μš©μžλ₯Ό λ‚˜νƒ€λ‚Έλ‹€.
  • λ§Œμ•½ μ‹€νŒ¨μœ¨μ΄ 같은 μŠ€ν…Œμ΄μ§€κ°€ μžˆλ‹€λ©΄ μž‘μ€ 번호의 μŠ€ν…Œμ΄μ§€κ°€ λ¨Όμ € μ˜€λ„λ‘ ν•˜λ©΄ λœλ‹€.
  • μŠ€ν…Œμ΄μ§€μ— λ„λ‹¬ν•œ μœ μ €κ°€ μ—†λŠ” 경우 ν•΄λ‹Ή μŠ€ν…Œμ΄μ§€μ˜ μ‹€νŒ¨μœ¨μ€ 0 μœΌλ‘œ μ •μ˜ν•œλ‹€.

μž…μΆœλ ₯ 예

N                                                                  stages                                                          result

5 [2, 1, 2, 6, 2, 4, 3, 3] [3,4,2,1,5]
4 [4,4,4,4,4] [4,1,2,3]

μž…μΆœλ ₯ 예 μ„€λͺ…

μž…μΆœλ ₯ 예 #1
1번 μŠ€ν…Œμ΄μ§€μ—λŠ” 총 8λͺ…μ˜ μ‚¬μš©μžκ°€ λ„μ „ν–ˆμœΌλ©°, 이 쀑 1λͺ…μ˜ μ‚¬μš©μžκ°€ 아직 ν΄λ¦¬μ–΄ν•˜μ§€ λͺ»ν–ˆλ‹€. λ”°λΌμ„œ 1번 μŠ€ν…Œμ΄μ§€μ˜ μ‹€νŒ¨μœ¨μ€ λ‹€μŒκ³Ό κ°™λ‹€.

  • 1 번 μŠ€ν…Œμ΄μ§€ μ‹€νŒ¨μœ¨ : 1/8

2번 μŠ€ν…Œμ΄μ§€μ—λŠ” 총 7λͺ…μ˜ μ‚¬μš©μžκ°€ λ„μ „ν–ˆμœΌλ©°, 이 쀑 3λͺ…μ˜ μ‚¬μš©μžκ°€ 아직 ν΄λ¦¬μ–΄ν•˜μ§€ λͺ»ν–ˆλ‹€. λ”°λΌμ„œ 2번 μŠ€ν…Œμ΄μ§€μ˜ μ‹€νŒ¨μœ¨μ€ λ‹€μŒκ³Ό κ°™λ‹€.

  • 2 번 μŠ€ν…Œμ΄μ§€ μ‹€νŒ¨μœ¨ : 3/7

λ§ˆμ°¬κ°€μ§€λ‘œ λ‚˜λ¨Έμ§€ μŠ€ν…Œμ΄μ§€μ˜ μ‹€νŒ¨μœ¨μ€ λ‹€μŒκ³Ό κ°™λ‹€.

  • 3 번 μŠ€ν…Œμ΄μ§€ μ‹€νŒ¨μœ¨ : 2/4
  • 4번 μŠ€ν…Œμ΄μ§€ μ‹€νŒ¨μœ¨ : 1/2
  • 5번 μŠ€ν…Œμ΄μ§€ μ‹€νŒ¨μœ¨ : 0/1

각 μŠ€ν…Œμ΄μ§€μ˜ 번호λ₯Ό μ‹€νŒ¨μœ¨μ˜ λ‚΄λ¦Όμ°¨μˆœμœΌλ‘œ μ •λ ¬ν•˜λ©΄ λ‹€μŒκ³Ό κ°™λ‹€.

  • [3,4,2,1,5]

μž…μΆœλ ₯ 예 #2

λͺ¨λ“  μ‚¬μš©μžκ°€ λ§ˆμ§€λ§‰ μŠ€ν…Œμ΄μ§€μ— μžˆμœΌλ―€λ‘œ 4번 μŠ€ν…Œμ΄μ§€μ˜ μ‹€νŒ¨μœ¨μ€ 1이며 λ‚˜λ¨Έμ§€ μŠ€ν…Œμ΄μ§€μ˜ μ‹€νŒ¨μœ¨μ€ 0이닀.

  • [4,1,2,3]

[좜처]

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

 

ν”„λ‘œκ·Έλž˜λ¨ΈμŠ€

μ½”λ“œ μ€‘μ‹¬μ˜ 개발자 μ±„μš©. μŠ€νƒ 기반의 ν¬μ§€μ…˜ 맀칭. ν”„λ‘œκ·Έλž˜λ¨ΈμŠ€μ˜ 개발자 λ§žμΆ€ν˜• ν”„λ‘œν•„μ„ λ“±λ‘ν•˜κ³ , λ‚˜μ™€ 기술 ꢁ합이 잘 λ§žλŠ” 기업듀을 맀칭 λ°›μœΌμ„Έμš”.

programmers.co.kr

생각

두 κ°€μ§€λ‘œ 생각해볼 수 μžˆλ‹€. 

1. μ‹€νŒ¨μœ¨μ„ κ³„μ‚°ν•œλ‹€.

2. μŠ€ν…Œμ΄μ§€ 번호λ₯Ό μ‹€νŒ¨μœ¨ 순으둜 λ‚΄λ¦Όμ°¨μˆœ μ •λ ¬ν•œλ‹€. 

 

μ£Όμ˜ν•΄μ•Όν•  점은 λ„μ „μž μˆ˜κ°€ 0이면 ν•΄λ‹Ή μŠ€ν…Œμ΄μ§€μ— λ„μ „ν•œ μ‚¬λžŒμ΄ 아무도 μ—†λ‹€λŠ” λœ»μ΄λ―€λ‘œ μ‹€νŒ¨μœ¨μ„ 0으둜 λ„£μ–΄μ£Όμ–΄μ•Όν•œλ‹€.

미처 생각λͺ»ν–ˆλ‹€κ³  ν•˜λ”λΌλ„ λΆ„λͺ¨λ₯Ό 0으둜 λ‚˜λˆ„λ©΄ μ•ˆλ˜λ‹ˆκΉ μ²˜λ¦¬ν•΄μ€˜μ•Όν•œλ‹€.

 

++ μΆ”κ°€μ μœΌλ‘œ 곡뢀) λ‚΄λ¦Όμ°¨μˆœν•  λ•Œ greater<int, int> > ()  μ‚¬μš©ν•΄λ„ 될까?! -> μ—¬κΈ°μ„œλŠ” NO! 첫번째 수, λ‘λ²ˆμ§Έ 수 λ‘˜λ‹€ λ‚΄λ¦Όμ°¨μˆœ 정렬을 ν•΄μ•Όν•˜λŠ” 거라면 compareν•¨μˆ˜λ₯Ό μ΄μš©ν•˜μ§€ μ•Šκ³  greater을 μ΄μš©ν•΄λ„ λœλ‹€. 그리고 greater<int, int> > ()λ₯Ό μ‚¬μš©ν•˜λ©΄ first값에 μš°μ„ ν•˜μ—¬ μ •λ ¬λœλ‹€. 

 

μž‘μ„±ν•œ μ½”λ“œ

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
#include <string>
#include <vector>
#include <iostream>
#include <algorithm>
 
using namespace std;
//1. μ‹€νŒ¨μœ¨ κ³„μ‚°
//2. μŠ€ν…Œμ΄μ§€ λ²ˆν˜Έ μ‹€νŒ¨μœ¨ μˆœμœΌλ‘œ λ‚΄λ¦Όμ°¨μˆœ μ •λ ¬
bool compare(const pair<intdouble> &a, const pair<intdouble> & b){
    //λ‘λ²ˆμ§Έ μˆ˜κ°€ κ°™λ‹€λ©΄
    if(a.second == b.second){
        return a.first < b.first;
    }
    return a.second > b.second;
}
vector<int> solution(int N, vector<int> stages) {
    vector<int> answer;
    vector<pair<intdouble> > v;
    
    for(int i=1; i<=N; i++){
        int challenge = 0//λ„μ „μž μˆ˜
        int fail = 0;      //μ‹€νŒ¨μž μˆ˜
       
        for(int j=0; j<stages.size(); j++){   
            if(stages[j] >= i){
                challenge++;
            }
            if(stages[j] == i){
                fail++;
            }
        }
        
        if(challenge == 0){ //ν•΄λ‹Ή μŠ€ν…Œμ΄μ§€μ— κ°„ μ‚¬λžŒμ΄ μ•„무도 μ—†μŒ
            v.push_back(make_pair(i, 0));
        }else{
            v.push_back(make_pair(i, (double)fail/challenge));
        }
    }
    
    sort(v.begin(), v.end(), compare);
    
    for(int i=0; i<v.size(); i++){
        answer.push_back(v[i].first);
    }
    
    return answer;
}
http://colorscripter.com/info#e" target="_blank" style="color:#4f4f4ftext-decoration:none">Colored by Color Scripter
λ°˜μ‘ν˜•
Comments