코딩 테스트 작심삼일

코딩 테스트 대비 8일차(programmers)

youngw77 2023. 1. 4. 16:58

1.2차원으로 만들기

2.공 던지기

코드

function solution(numbers, k) {
    var answer = 0;
    var sum = [];
    var odd = [];
    var even = [];
    var half = (numbers.length/2);
    for(let i=0; i<numbers.length; i++){
        if(i%2 == 1){
            even.push(numbers[i]);
        }
        else if(i%2 == 0){
            odd.push(numbers[i]);
        }
    }
    if(numbers.length%2 == 0){
        if(k>odd.length){
            let rest = (k%odd.length)-1;
            if(rest == -1){
                answer = odd[0];
            }
            else{
            answer = odd[rest];
            }
        }
        else{
        for(let j=0; j<k; j++){
            answer = odd[j];
        }
        }
    }
    else if(numbers.length%2 == 1){
        sum = [
            ...odd,
            ...even,
            ];
        for(let n=0; n<k; n++){
            let m = n%numbers.length;
            answer = sum[m];
        }
    }
    return answer;
}

나의 풀이 numbers.length가 짝수 홀수 일 때를 나눠서 문제를 풀었다.

성공은 했지만 너무 불필요한 조건이 많고 길어서 다른 사람들이 풀이를 보고 다시 정리해서 풀어보자

다른 사람의 풀이 

function solution(numbers, k) {
    let Index = 0;

    for(let i = 0; i < k; i++){
        Index += 2;    

        if(Index > numbers.length){
            Index -= numbers.length;
        }
    }

    return numbers[Index - 2];
}

index라는 다음에 공을 받은 사람을 += 2로 증가시켜 구현하였고

if 조건문으로 index값이 numbers.length의 값을 증가 하면 undefined가 뜨기 떄문에

처음 값 즉 numbers[0]으로 돌아가기 위해 index = index - numbers.length를 해주어 돌아가고

최종 결과값은 다음 공을 받을 사람의 값이기 떄문에 index -2 를 해주어 공을 던지는 사람의 값을

return해주었다.

3.배열 회전시키기

4.주사위의 개수

5.합성수 찾기

6.최대값 만들기


7.팩토리얼

8.모음 제거