Contents

λͺ¨μ˜κ³ μ‚¬ (with.Java)

   Aug 7, 2024     3 min read

λͺ¨μ˜κ³ μ‚¬ (with.Java) λ¬Έμ œμ— λŒ€ν•˜μ—¬ μ•Œμ•„λ³Έ κΈ€μž…λ‹ˆλ‹€.

μ½”λ”© ν…ŒμŠ€νŠΈ 문제λ₯Ό ν’€λ©°, ν’€μ—ˆλ˜ λ¬Έμ œμ— λŒ€ν•œ 회고λ₯Ό ν•΄λ³΄κ³ μž ν•©λ‹ˆλ‹€.

λ¬Έμ œμ— λŒ€ν•΄ λ¨Όμ € μ•Œμ•„λ³΄κ² μŠ΅λ‹ˆλ‹€.

문제

μˆ˜ν¬μžλŠ” μˆ˜ν•™μ„ ν¬κΈ°ν•œ μ‚¬λžŒμ˜ μ€€λ§μž…λ‹ˆλ‹€.

수포자 삼인방은 λͺ¨μ˜κ³ μ‚¬μ— μˆ˜ν•™ 문제λ₯Ό μ „λΆ€ 찍으렀 ν•©λ‹ˆλ‹€.

μˆ˜ν¬μžλŠ” 1번 λ¬Έμ œλΆ€ν„° λ§ˆμ§€λ§‰ λ¬Έμ œκΉŒμ§€ λ‹€μŒκ³Ό 같이 μ°μŠ΅λ‹ˆλ‹€.

  • 1번 μˆ˜ν¬μžκ°€ μ°λŠ” 방식: 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, …
  • 2번 μˆ˜ν¬μžκ°€ μ°λŠ” 방식: 2, 1, 2, 3, 2, 4, 2, 5, 2, 1, 2, 3, 2, 4, 2, 5, …
  • 3번 μˆ˜ν¬μžκ°€ μ°λŠ” 방식: 3, 3, 1, 1, 2, 2, 4, 4, 5, 5, 3, 3, 1, 1, 2, 2, 4, 4, 5, 5, …

1번 λ¬Έμ œλΆ€ν„° λ§ˆμ§€λ§‰ λ¬Έμ œκΉŒμ§€μ˜ 정닡이 μˆœμ„œλŒ€λ‘œ 듀은 λ°°μ—΄ answersκ°€ μ£Όμ–΄μ‘Œμ„ λ•Œ, κ°€μž₯ λ§Žμ€ 문제λ₯Ό 맞힌 μ‚¬λžŒμ΄ λˆ„κ΅¬μΈμ§€ 배열에 λ‹΄μ•„ return ν•˜λ„λ‘ solution ν•¨μˆ˜λ₯Ό μž‘μ„±ν•΄μ£Όμ„Έμš”.

μ œν•œμ‚¬ν•­

  • μ‹œν—˜μ€ μ΅œλŒ€ 10,000 문제둜 κ΅¬μ„±λ˜μ–΄μžˆμŠ΅λ‹ˆλ‹€.
  • 문제의 정닡은 1, 2, 3, 4, 5쀑 ν•˜λ‚˜μž…λ‹ˆλ‹€.
  • κ°€μž₯ 높은 점수λ₯Ό 받은 μ‚¬λžŒμ΄ μ—¬λŸΏμΌ 경우, returnν•˜λŠ” 값을 μ˜€λ¦„μ°¨μˆœ μ •λ ¬ν•΄μ£Όμ„Έμš”.

μž…μΆœλ ₯ μ˜ˆμ‹œ

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

λ¬Έμ œμ— λŒ€ν•œ λ‚˜μ˜ 풀이

import java.util.ArrayList;

class Solution {
    public int[] solution(int[] answers) {

        int[] person1 = {1, 2, 3, 4, 5};
        int[] person2 = {2, 1, 2, 3, 2, 4, 2, 5};
        int[] person3 = {3, 3, 1, 1, 2, 2, 4, 4, 5, 5};
        ArrayList<Integer> arr = new ArrayList<>();
        int[] count = new int[3];

        for(int i = 0; i < answers.length; i++){
            if(person1[i % person1.length] == answers[i]){
                count[0]++;
            }
            if(person2[i % person2.length] == answers[i]){
                count[1]++;
            }
            if(person3[i % person3.length] == answers[i]){
                count[2]++;
            }
        }

        int maxNum = Math.max(count[0], Math.max(count[1], count[2]));

        for(int i = 0; i < count.length; i++){
            if(maxNum == count[i]){
                arr.add(i + 1);
            }
        }

        int[] answer = new int[arr.size()];
        for(int i = 0; i < arr.size(); i++){
            answer[i] = arr.get(i);
        }
        return answer;
    }
}

풀이 μ„€λͺ…

  • solution λ©”μ„œλ“œλŠ” μ •μˆ˜ λ°°μ—΄ answersλ₯Ό μž…λ ₯으둜 λ°›μŠ΅λ‹ˆλ‹€.
  • μ„Έ 수포자의 찍기 νŒ¨ν„΄μ„ 각각 person1, person2, person3 배열에 μ €μž₯ν•©λ‹ˆλ‹€.
  • 각 μˆ˜ν¬μžκ°€ 맞힌 문제의 수λ₯Ό μ €μž₯ν•  λ°°μ—΄ countλ₯Ό μƒμ„±ν•©λ‹ˆλ‹€. ν¬κΈ°λŠ” 3μž…λ‹ˆλ‹€.
  • for 루프λ₯Ό μ‚¬μš©ν•˜μ—¬ μ •λ‹΅ 배열을 μˆœνšŒν•˜λ©° 각 수포자의 νŒ¨ν„΄κ³Ό λΉ„κ΅ν•˜μ—¬ 맞힌 문제의 수λ₯Ό μΉ΄μš΄νŠΈν•©λ‹ˆλ‹€.
  • 각 μˆ˜ν¬μžκ°€ 맞힌 문제의 수 쀑 μ΅œλŒ€κ°’μ„ κ΅¬ν•©λ‹ˆλ‹€.
  • μ΅œλŒ€κ°’κ³Ό 같은 값을 κ°€μ§€λŠ” 수포자의 번호λ₯Ό arr λ¦¬μŠ€νŠΈμ— μ €μž₯ν•©λ‹ˆλ‹€.
  • arr 리슀트의 λ‚΄μš©μ„ λ°°μ—΄λ‘œ λ³€ν™˜ν•˜μ—¬ λ°˜ν™˜ν•©λ‹ˆλ‹€.

κ²°λ‘ 

이 μ½”λ“œλŠ” 각 수포자의 찍기 νŒ¨ν„΄μ— 따라 μ •λ‹΅κ³Ό λΉ„κ΅ν•˜μ—¬ κ°€μž₯ 많이 맞힌 μ‚¬λžŒμ„ μ°ΎλŠ” 문제λ₯Ό ν•΄κ²°ν•©λ‹ˆλ‹€.