IT/Programmers

[Programmers/ 코딩테스트 입문] 공던지기 ****다시보기

안선생 Dr.Ahn 2022. 12. 15. 18:37
728x90
반응형

공던지기 (Java)

슬애기 같으니까 반면교사 삼아야 할 내 코드

class Solution {
    public int solution(int[] numbers, int k) {
        int answer = 0;
        int cnt = 0;
        int idx = 0;
        for(int i = 0; i < k*2; i = i + 2){
            cnt++;
            idx = i%numbers.length;
            if(cnt == k) break;
        }
        answer = idx+1;
        return answer;
    }
}

 

수정한 코드

class Solution {
    public int solution(int[] numbers, int k) {
        int answer = 0;
        answer = ((k-1)*2)%numbers.length +1;
        return answer;
    }
}

하나씩 건너니까 k*2번째인데, 1번(index = 0)이 무조건 포함되기 때문에 처음에 k에서 1을 빼준다.

배열이 반복될 수 있도록 numbers.length로 mod 해주면 그게 답의 index가 된다.

배열의 값은 index +1 이므로 굳이 배열에서 꺼내지 않고 +1로 해주었다.

 

 

 

 

 

내가 배워야 할 코드

class Solution {
    public int solution(int[] numbers, int k) {
        int answer = 0;
        answer = numbers[((1 + ((k-1)*2))%numbers.length) - 1];
        return answer;
    }
}


class Solution {
    public int solution(int[] numbers, int k) {
        return (k-1)*2 % numbers.length+1;
    }
}

class Solution {
    public int solution(int[] numbers, int k) {
        return numbers[((k-1)*2)%numbers.length];
    }
}

k-1을 왜 하는지 아직도 이해가 가지 않는다..

 

 

 

 

내가 하고싶었던 코드

 

import java.util.stream.IntStream;

class Solution {
    public int solution(int[] numbers, int k) {
        return IntStream.range(1, k)
        	.mapToObj(i -> numbers)
                .flatMapToInt(IntStream::of)
                .toArray()[2 * k - 2];
    }
}

*********

728x90
반응형