inblog logo
|
πŸ‘¨πŸ»β€πŸ’»DriedPollack's Blog
    πŸ’‘Coding Testβ˜•Java

    [programmers] μ‹€νŒ¨μœ¨ - Java

    슈퍼 κ²Œμž„ 개발자 μ˜€λ λ¦¬λŠ” μ‹€νŒ¨μœ¨μ„ κ³„μ‚°ν•˜λŠ” μ½”λ“œλ₯Ό μž‘μ„±ν•΄μ•Ό ν•œλ‹€. μ‹€νŒ¨μœ¨μ€ μŠ€ν…Œμ΄μ§€μ— λ„λ‹¬ν–ˆμœΌλ‚˜ ν΄λ¦¬μ–΄ν•˜μ§€ λͺ»ν•œ ν”Œλ ˆμ΄μ–΄μ˜ 수λ₯Ό μŠ€ν…Œμ΄μ§€μ— λ„λ‹¬ν•œ ν”Œλ ˆμ΄μ–΄ 수둜 λ‚˜λˆˆ 값이닀. μŠ€ν…Œμ΄μ§€μ˜ 개수 Nκ³Ό μ‚¬μš©μžκ°€ ν˜„μž¬ λ©ˆμΆ°μžˆλŠ” μŠ€ν…Œμ΄μ§€μ˜ λ²ˆν˜Έκ°€ λ‹΄κΈ΄ λ°°μ—΄ stagesκ°€ μ£Όμ–΄μ§ˆ λ•Œ, μ‹€νŒ¨μœ¨μ΄ 높은 μŠ€ν…Œμ΄μ§€λΆ€ν„° λ‚΄λ¦Όμ°¨μˆœμœΌλ‘œ μŠ€ν…Œμ΄μ§€μ˜ λ²ˆν˜Έκ°€ λ‹΄κ²¨μžˆλŠ” 배열을 λ°˜ν™˜ν•˜λŠ” solution ν•¨μˆ˜λ₯Ό μ™„μ„±ν•΄μ•Ό ν•œλ‹€. 이λ₯Ό μœ„ν•΄ λ°°μ—΄κ³Ό HashMap을 μ‚¬μš©ν•˜λ©°, HashMap의 keySet을 List에 넣은 ν›„, List의 sort λ©”μ†Œλ“œλ‘œ 값을 μ •λ ¬ν•œλ‹€.
    DriedPollack's avatar
    DriedPollack
    Apr 09, 2024
    [programmers] μ‹€νŒ¨μœ¨ - Java
    Contents
    μ‹€νŒ¨μœ¨solution.java핡심 ν‚€μ›Œλ“œκ²°λ‘ !

    μ‹€νŒ¨μœ¨

    문제 μ„€λͺ…

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

    solution.java

    import java.util.*; class Solution { public int[] solution(int N, int[] stages) { int[] arr = new int[N+1]; double reachedPlayer = stages.length; for(int i=0; i<stages.length; i++){ arr[stages[i]-1]++; } HashMap<Integer, Double> map = new HashMap<>(); for(int i=0; i<arr.length-1; i++){ double num = 0.0; if(arr[i]!=0){ num = arr[i] / reachedPlayer; } map.put(i+1, num); reachedPlayer -= arr[i]; } List<Integer> keySet = new ArrayList<>(map.keySet()); int[] answer = new int[N]; keySet.sort((o1, o2) -> map.get(o2).compareTo(map.get(o1))); for(int i=0; i<keySet.size(); i++){ answer[i] = keySet.get(i); } return answer; } }
     

    핡심 ν‚€μ›Œλ“œ

    • 배열을 μ„ μ–Έν•΄μ„œ ν•΄λ‹Ήν•˜λŠ” μ‚¬μš©μžκ°€ ν˜„μž¬ λ©ˆμΆ°μžˆλŠ” μŠ€ν…Œμ΄μ§€λ₯Ό λ°°μ—΄μ˜ 인덱슀둜 μ§€μ •ν•΄μ„œ 값을 μ¦κ°€μ‹œν‚¨λ‹€.
    • HashMap을 μ„ μ–Έν•΄μ„œ μ‹€νŒ¨μœ¨κ³Ό 인덱슀λ₯Ό 쌍으둜 μ €μž₯ν•œλ‹€.
      • 각 μŠ€ν…Œμ΄μ§€λ§ˆλ‹€ λ„μ „ν•œ μ‚¬μš©μžλŠ” 이전 μŠ€ν…Œμ΄μ§€μ—μ„œ ν΄λ¦¬μ–΄ν•˜μ§€ λͺ»ν•œ μ‚¬μš©μžλ₯Ό λΉΌλ©΄ ꡬ할 수 μžˆλ‹€.
    • HashMap의 keySet을 List에 넣은 ν›„, List의 .sort((o1, o2) -> HashMap.get(o2).compareTo(HashMap.get(o1)) λ©”μ†Œλ“œλ‘œ 값을 μ •λ ¬ν•  수 μžˆλ‹€.
     

    κ²°λ‘ !

    ν•΄λ‹Ή 문제λ₯Ό ν’€λ©΄μ„œ 기쑴에 ν—·κ°ˆλ Έλ˜ HashMap의 μ‚¬μš©λ²•κ³Ό μ •λ ¬ 방법을 λ‹€μ‹œ 읡힐 수 μžˆμ—ˆλ‹€.
    Share article
    Contents
    μ‹€νŒ¨μœ¨solution.java핡심 ν‚€μ›Œλ“œκ²°λ‘ !

    πŸ‘¨πŸ»β€πŸ’»DriedPollack's Blog

    RSSΒ·Powered by Inblog