๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ

Algorithm

[Algorithm/Java][ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค] ๋ชจ์˜๊ณ ์‚ฌ

๋ฐ˜์‘ํ˜•

[ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค] ๋ชจ์˜๊ณ ์‚ฌ

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

๋ฌธ์ œ ์„ค๋ช…

์ˆ˜ํฌ์ž๋Š” ์ˆ˜ํ•™์„ ํฌ๊ธฐํ•œ ์‚ฌ๋žŒ์˜ ์ค€๋ง์ž…๋‹ˆ๋‹ค. ์ˆ˜ํฌ์ž ์‚ผ์ธ๋ฐฉ์€ ๋ชจ์˜๊ณ ์‚ฌ์— ์ˆ˜ํ•™ ๋ฌธ์ œ๋ฅผ ์ „๋ถ€ ์ฐ์œผ๋ ค ํ•ฉ๋‹ˆ๋‹ค. ์ˆ˜ํฌ์ž๋Š” 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ํ•˜๋Š” ๊ฐ’์„ ์˜ค๋ฆ„์ฐจ์ˆœ ์ •๋ ฌํ•ด์ฃผ์„ธ์š”.

Code

class Solution {
    public int[] solution(int[] answers) {
        int[] result;
        int[] score = new int[3];
        int[] one = {1,2,3,4,5};
        int[] two = {2,1,2,3,2,4,2,5};
        int[] three = {3,3,1,1,2,2,4,4,5,5};
        for(int i = 0; i<answers.length; i++){
            if(one[i%5]==answers[i]) score[0]++;
            if(two[i%8]==answers[i]) score[1]++;
            if(three[i%10]==answers[i]) score[2]++;
        }
        int max = 0;
        int[] maxidx = new int[3];
        for(int i=0;i<3;i++){
            if(score[i]>max){
                max=score[i];
            }
        }
        int size=0;
        for(int i=0;i<3;i++){
            if(max==score[i]){
                maxidx[i]=1;
                size++;
            }            
        }
        result = new int[size];
        int a = 0;
        for(int i=0;i<3;i++){
            if(maxidx[i]==1){
                result[a++] = i+1;
            }
        }
        return result;
    }
}

Code ์„ค๋ช…

1,2,3๋ฒˆ ์ˆ˜ํฌ์ž๋“ค์ด ์ผ์ •ํ•œ ํŒจํ„ด์„ ๊ฐ€์ง€๊ณ  ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ํŒจํ„ด์„ ๊ฐ๊ฐ์˜ ๋ฐฐ์—ด์— ์ €์žฅํ•ด์ค€๋‹ค(one, two, three)
๊ทธ ๋’ค์— ์ž…๋ ฅ๊ฐ’์ธ answers์˜ ๊ธธ์ด๋งŒํผ ๋ฐ˜๋ณต๋ฌธ์„ ๋Œ๋ ค์„œ ํŒจํ„ด๊ณผ ๋‹ต์ด ์ผ์น˜ํ•˜๋ฉด ์ผ์น˜ํ•œ ์ˆ˜ํฌ์ž์˜ score๋ฅผ ์˜ฌ๋ ค์ค€๋‹ค.(0๋ถ€ํ„ฐ ์‹œ์ž‘)
๊ทธ ํ›„์— score์˜ ์ตœ๋Œ“๊ฐ’์„ max์— ์ €์žฅํ•˜๊ณ  score๊ฐ€ max๊ฐ’๊ณผ ์ผ์น˜ํ•˜๋Š” ์ธ๋ฑ์Šค๋ฅผ maxidx๋ฅผ ์ด์šฉํ•ด์„œ ๊ธฐ๋กํ•˜๊ณ  size๋ฅผ ์ด์šฉํ•ด์„œ ์ตœ๋Œ“๊ฐ’์„ ๊ฐ€์ง„ ์‚ฌ๋žŒ์ด ๋ช‡๋ช…์ธ์ง€ ์ฒดํฌํ•œ๋‹ค.
๊ทธ ์ดํ›„์— result๋ฅผ size๋งŒํผ ํ• ๋‹นํ•ด์ฃผ๊ณ  maxidx๋ฅผ ํ†ตํ•ด์„œ ์ตœ๋Œ€๊ฐ’์ธ ์ˆ˜ํฌ์ž๋ฅผ result์— ๋„ฃ์–ด์ค€๋‹ค.

๋ฐฐ์šด์ 

์ฒ˜์Œ์— ๋ฌธ์ œ๋ฅผ ๋ดค์„๋•Œ๋Š” ์–ด๋–ป๊ฒŒ ํ’€์ง€ ๋ชจ๋ฅด๊ฒ ์–ด์„œ ๋ฌด์‹ํ•˜๊ฒŒ ๋ฐ˜๋ณต๋ฌธ์„ ๋Œ๋ฆฌ๋ฉด์„œ ์กฐ๊ฑด๋ฌธ์„ ๊ณ„์† ๋„ฃ์–ด์ฃผ๋Š” ์‹์œผ๋กœ ํ•˜๋‹ค๊ฐ€
์ฝ”๋“œ๊ฐ€ ๋„ˆ๋ฌด ๋ณต์žกํ•ด์ ธ์„œ ํฌ๊ธฐํ–ˆ๋‹ค.
๊ทผ๋ฐ ์ผ์ •ํ•œ ํŒจํ„ด๋“ค์„ ๋ฐฐ์—ด๋กœ ์„ ์–ธํ•ด์ค˜์„œ ๋น„๊ตํ•ด์ฃผ๋‹ˆ๊นŒ ์ฝ”๋“œ๊ฐ€ ๊ต‰์žฅํžˆ ๊ฐ„๋‹จํ•ด์กŒ๋‹ค.(๊ตฌ๊ธ€์˜ ๋„์›€์œผ๋กœ ์•Œ๊ฒŒ๋˜์—ˆ๋‹ค...)
๋ฌธ์ œ๋ฅผ ์ œ์ถœํ•˜๊ณ  ๋‹ค๋ฅธ ์‚ฌ๋žŒ๋“ค์˜ ํ’€์ด๋ฅผ ํฌ๋‹ˆ๊นŒ Math.max() ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ํ’€์ด๊ฐ€ ์žˆ์—ˆ๋‹ค.
Math.max๋Š” ๋‘ ๊ฐ’์„ ๋น„๊ตํ•ด์„œ ํฐ ๊ฐ’์„ ๋ฆฌํ„ดํ•ด์ฃผ๋Š” ๋ฉ”์†Œ๋“œ์ด๋‹ค. ๋‹ค์Œ๋ฌธ์ œ๋ถ€ํ„ฐ๋Š” ์‚ฌ์šฉํ•ด ๋ด์•ผ๊ฒ ๋‹ค.

๋ฐ˜์‘ํ˜•