πŸ“Œ μ½”λ”©ν…ŒμŠ€νŠΈ μ€€λΉ„ :: ν”„λ‘œκ·Έλž˜λ¨ΈμŠ€ :: 완전탐색 - 수포자 πŸ‘€

Dev-OΒ·2021λ…„ 11μ›” 25일
0

CodingTest

λͺ©λ‘ 보기
3/18
post-thumbnail

수포자 풀이방법


λ¬Έμ œμ„€λͺ…

문제 μ„€λͺ…
μˆ˜ν¬μžλŠ” μˆ˜ν•™μ„ ν¬κΈ°ν•œ μ‚¬λžŒμ˜ μ€€λ§μž…λ‹ˆλ‹€. 수포자 삼인방은 λͺ¨μ˜κ³ μ‚¬μ— μˆ˜ν•™ 문제λ₯Ό μ „λΆ€ 찍으렀 ν•©λ‹ˆλ‹€. μˆ˜ν¬μžλŠ” 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ν•˜λŠ” 값을 μ˜€λ¦„μ°¨μˆœ μ •λ ¬ν•΄μ£Όμ„Έμš”.

μž…μΆœλ ₯ 예
answers return
[1,2,3,4,5][1]
[1,3,2,4,2][1,2,3]

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

μž…μΆœλ ₯ 예1

수포자 1은 λͺ¨λ“  문제λ₯Ό λ§žν˜”μŠ΅λ‹ˆλ‹€.
수포자 2λŠ” λͺ¨λ“  문제λ₯Ό ν‹€λ ΈμŠ΅λ‹ˆλ‹€.
수포자 3은 λͺ¨λ“  문제λ₯Ό ν‹€λ ΈμŠ΅λ‹ˆλ‹€.
λ”°λΌμ„œ κ°€μž₯ 문제λ₯Ό 많이 맞힌 μ‚¬λžŒμ€ 수포자 1μž…λ‹ˆλ‹€.

μž…μΆœλ ₯ 예2

λͺ¨λ“  μ‚¬λžŒμ΄ 2λ¬Έμ œμ”©μ„ λ§žμ·„μŠ΅λ‹ˆλ‹€.


λ¬Έμ œν•΄μ„

문제λ₯Ό μ΄ν•΄ν•˜λŠ”λ°μ—λŠ” μ˜€λž˜κ±Έλ¦¬μ§€ μ•Šμ•˜λ‹€. κ·Έλƒ₯ μ°λŠ” νŒ¨ν„΄κ³Ό λ‹΅μ•ˆμ§€μ™€ 1:1 맀칭을 ν•΄μ„œ 맞으면 λ§žμ€ 개수λ₯Ό μ²΄ν¬ν•˜κ³ 
수포자 1,2,3 쀑 κ°€μž₯ 많이 λ§žμ€ κ°―μˆ˜μ™€ 수포자 1,2,3이 λ§žμ€κ°―μˆ˜λ₯Ό 비ꡐ해 κ°™μœΌλ©΄ 배열에 μ €μž₯ν–ˆλ‹€κ°€ λ°˜ν™˜ν•΄μ£Όλ©΄ λœλ‹€.
근데 λ‚œ νŒ¨ν„΄μ„ μ΄μƒν•˜κ²Œ μž‘μ•˜λ‹€. 생각할 수 μžˆλŠ” κΈ°νšŒκ°€ 됐닀...

μ½”λ“œ

class Solution {
    public int[] solution(int[] answers) {
        
        //μˆ˜ν¬μžλ“€ 
        int[] supoja1 = {1,2,3,4,5};
        int[] supoja2 = {2,1,2,3,2,4,2,5};
        int[] supoja3 = {3,3,1,1,2,2,4,4,5,5};
        int[] cnt = new int[3];
        //μˆ˜ν¬μžλ“€ 맞좘 갯수 μΆ”κ°€
        for(int i = 0; i<answers.length; i++){
            if(answers[i] == supoja1[i%supoja1.length])
                cnt[0]++;
            if(answers[i] == supoja2[i%supoja2.length])
                cnt[1]++;
            if(answers[i] == supoja3[i%supoja3.length]) 
                cnt[2]++;
        }
        
        int max = 0;
        
        List<Integer> answerList = new ArrayList<Integer>();    
        //맞좘 μ΅œλŒ€κ°―μˆ˜ κ΅¬ν•˜κΈ°
        for(int i = 0 ; i<cnt.length;i++){
            if(max < cnt[i])
                max = cnt[i];
        }
        //μ΅œλŒ€κ°―μˆ˜λž‘ μˆ˜ν¬μžμ°μ€ κ°―μˆ˜λž‘ κ°™μœΌλ©΄ λ¦¬μŠ€νŠΈμ— λ§žμΆ°μ„œ 1,2,3 μΆ”κ°€
        for(int i = 0; i <cnt.length ; i++){
            if(max == cnt[i]) answerList.add(i+1);
        }
        //λ¦¬μŠ€νŠΈμ—μ„œ λ°°μ—΄λ‘œ 빼쀌
        int[] answer = new int[answerList.size()];
        for(int i = 0; i <answer.length ; i++){
            answer[i] = answerList.get(i);
        }
        
        return answer; 
        
    }
profile
Being Outstanding needs UnderstandingπŸš€

0개의 λŒ“κΈ€