Published on

πŸ› οΈ[ν”„λ‘œκ·Έλž˜λ¨ΈμŠ€]-μ‹€νŒ¨μœ¨

πŸ“–λ¬Έμ œ μ„€λͺ…


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

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

μ‹€νŒ¨μœ¨μ€ λ‹€μŒκ³Ό 같이 μ •μ˜ν•œλ‹€.

AA = μŠ€ν…Œμ΄μ§€μ— λ„λ‹¬ν–ˆμœΌλ‚˜ 아직 ν΄λ¦¬μ–΄ν•˜μ§€ λͺ»ν•œ ν”Œλ ˆμ΄μ–΄μ˜ 수

BB = μŠ€ν…Œμ΄μ§€μ— λ„λ‹¬ν•œ ν”Œλ ˆμ΄μ–΄ 수

AB A \over B

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

μ œν•œμ‚¬ν•­

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

✏️문제 풀이


  • C++ μ‚¬μš© ν•¨μˆ˜
    • count() ν•¨μˆ˜
      • 주어진 λ²”μœ„ μ•ˆμ—μ„œ λ§€κ°œλ³€μˆ˜ κ°’μ˜ 갯수λ₯Ό λ°˜ν™˜ν•˜λŠ” ν•¨μˆ˜
      •   #include <algorithm>
          int ret = count(start_point, end_point, search_value);
        
    • stable_sort() ν•¨μˆ˜
      • 주어진 λ²”μœ„λ₯Ό stable_sort ν•˜λŠ” ν•¨μˆ˜.

      stable_sort λž€?
      주어진 자료ꡬ쑰의 μ›λž˜ μˆœμ„œλŠ” μœ μ§€ν•˜λ©°, 비ꡐ κ°’λ§Œμ˜ λŒ€μ†Œλ₯Ό λΉ„κ΅ν•˜μ—¬ λ‚˜μ—΄ν•˜λŠ” μ •λ ¬
      [[1,3],[1,27],[2,45],[2,6]]
      λ‘λ²ˆμ§Έ 자리 stable_sort => [[1,3],[1,27],[2,6],[2,45]]

      •   #include <algorithm>
          stable_sort(start_point, end_point, operator(ν•„μš”ν•  경우 μž‘μ„±));
        
  • Python μ‚¬μš© ν•¨μˆ˜
    • divmod() ν•¨μˆ˜
    • sorted() ν•¨μˆ˜
      • 리슀트의 λ‚΄μž₯ ν•¨μˆ˜ sort()μ™€λŠ” 달리 sorted()ν•¨μˆ˜λŠ” 파이썬 λ‚΄μž₯ ν•¨μˆ˜μ΄λ‹€.
      • μ •λ ¬μ˜ λ‹€μ–‘ν•œ 섀정을 ν•  수 μžˆλ‹€.
      •   sorted(μ •λ ¬_객체, ν‚€_λ§€κ°œλ³€μˆ˜, μ •λ ¬μˆœμ„œ)
        

βŒ¨οΈν’€μ΄ μ½”λ“œ


  • C++ μ½”λ“œ
#include <vector>
#include <algorithm>
#include <utility>

using namespace std;

vector<int> solution(int N, vector<int> stages) {
    vector<int> answer;
    vector<pair<int, float>> v;
    sort(stages.begin(), stages.end());
    
    int user = stages.size();
    int finish_count = 0;
    double temp;

    for(int i = 0; i < N; i++) {
        user -= finish_count;
        if(user >= 1) {
            finish_count = count(stages.begin(), stages.end(), i+1);
            temp = finish_count / float(user);
            v.push_back(make_pair(i+1, temp));
        }
        else {
            v.push_back(make_pair(i+1, 0));
        }
    }

    stable_sort(v.begin(), v.end(), [](const auto& a, const auto& b) {return a.second > b.second; });
    for(auto it = 0; it < N; it++) {
        answer.push_back(v[it].first);
    }
    return answer;
}
  • 파이썬 μ½”λ“œ
def solution(N, stages):
    answer = []
    length = len(stages)
    for i in range(N):
        count = stages.count(i+1)        
        if count == 0:
            fail = 0
        else:
            fail = count / length
        answer.append((i+1, fail))
        length -= count
    
    answer = sorted(answer, key=lambda t: t[1], reverse=True)
    answer = [i[0] for i in answer]
    return answer

좜처 : ν”„λ‘œκ·Έλž˜λ¨ΈμŠ€ 2019 카카였 μ‹€νŒ¨μœ¨