Bomb Kirby Running

코딩 테스트 챌린지

코딩 테스트 10

^. ̫ .^ 2023. 5. 29. 19:16

728x90

문제1 점의 위치 구하기

사분면은 한 평면을 x축과 y축을 기준으로 나눈 네 부분입니다. 사분면은 아래와 같이 1부터 4까지 번호를매깁니다.

  • x 좌표와 y 좌표가 모두 양수이면 제1사분면에 속합니다.
  • x 좌표가 음수, y 좌표가 양수이면 제2사분면에 속합니다.
  • x 좌표와 y 좌표가 모두 음수이면 제3사분면에 속합니다.
  • x 좌표가 양수, y 좌표가 음수이면 제4사분면에 속합니다.

x 좌표 (x, y)를 차례대로 담은 정수 배열 dot이 매개변수로 주어집니다. 좌표 dot이 사분면 중 어디에 속하는지 1, 2, 3, 4 중 하나를 return 하도록 solution 함수를 완성해주세요

 

제한사항

  • dot의 길이 = 2
  • dot[0]은 x좌표를, dot[1]은 y좌표를 나타냅니다
  • -500 ≤ dot의 원소 ≤ 500
  • dot의 원소는 0이 아닙니다.

입출력 예

dot result
[2, 4] 1
[-7, 9] 2
function solution(dot) {
    const [x, y, z, t] = dot;
    
    if(x > 0 && y > 0) {
        return 1;
    }
   if(x < 0 && y > 0) {
        return 2;
    }
    if(x < 0 && y < 0) {
        return 3;
    }
    if(x > 0 && y < 0) {
        return 4;
    }
}

입력된 좌표를 배열로 받아와서 각각의 변수 x, y, z, t에 할당합니다

x가 양수이고 y가 양수인 경우: 사분면 1에 위치합니다. 1을 반환합니다

x가 음수이고 y가 양수인 경우: 사분면 2에 위치합니다. 2를 반환합니다

x가 음수이고 y가 음수인 경우: 사분면 3에 위치합니다. 3을 반환합니다

x가 양수이고 y가 음수인 경우: 사분면 4에 위치합니다. 4를 반환합니다

 

문제2 2차원으로 만들기

정수 배열 num_list와 정수 n이 매개변수로 주어집니다. num_list를 다음 설명과 같이 2차원 배열로 바꿔 return하도록 solution 함수를 완성해주세요.

num_list가 [1, 2, 3, 4, 5, 6, 7, 8] 로 길이가 8이고 n이 2이므로 num_list를 2 * 4 배열로 다음과 같이 변경합니다. 2차원으로 바꿀 때에는 num_list의 원소들을 앞에서부터 n개씩 나눠 2차원 배열로 변경합니다

num_list n result
[1, 2, 3, 4, 5, 6, 7, 8] 2 [[1, 2], [3, 4], [5, 6], [7, 8]]

제한사항

  • num_list의 길이는 n의 배 수개입니다.
  • 0 ≤ num_list의 길이 ≤ 150
  • 2 ≤ n < num_list의 길이

입출력 예

num_list n result
[1, 2, 3, 4, 5, 6, 7, 8] 2 [[1, 2], [3, 4], [5, 6], [7, 8]]
[100, 95, 2, 4, 5, 6, 18, 33, 948] 3 [[100, 95, 2], [4, 5, 6], [18, 33, 948]]
function solution(num_list, n) {
    const result = [];
    let tempArray = [];
    for(let i=0; i<num_list.length; i++){
        const item = num_list[i];
        tempArray.push(item);
        if(tempArray.length === n){
            result.push(tempArray);
            tempArray = [];
        }
    }
    return result;
}

결과를 저장할 빈 배열 result를 초기화합니다

임시 배열 tempArray를 초기화합니다

주어진 숫자 리스트 num_list를 반복하면서 각 숫자 item을 가져옵니다

itemtempArray에 추가합니다

tempArray의 길이가 n과 같아지면, tempArrayresult에 추가합니다

tempArray를 초기화하여 다음 묶음을 준비합니다

반복이 완료된 후에 result를 반환합니다

 

문제3 공던지기

머쓱이는 친구들과 동그랗게 서서 공 던지기 게임을 하고 있습니다. 공은 1번부터 던지며 오른쪽으로 한 명을 건너뛰고 그다음 사람에게만 던질 수 있습니다. 친구들의 번호가 들어있는 정수 배열 numbers와 정수 K가 주어질 때, k번째로 공을 던지는 사람의 번호는 무엇인지 return 하도록 solution 함수를 완성해보세요.

제한사항

  • 2 < numbers의 길이 < 100
  • 0 < k < 1,000
  • numbers의 첫 번째와 마지막 번호는 실제로 바로 옆에 있습니다.
  • numbers는 1부터 시작하며 번호는 순서대로 올라갑니다.

입출력 예

numbers n result
[1, 2, 3, 4]
2 3
[1, 2, 3, 4, 5, 6] 5 3
[1, 2, 3] 3 2
function solution(numbers, k) {
    
    let cnt = 1;
    for(let i=0; ; i += 2){
        i %= numbers.length
        const item = numbers[i];
        if(cnt === k){
            return item;
        }
        cnt += 1;
    }
}

선택할 숫자의 간격을 나타내는 변수 k를 가지고, 선택한 숫자의 개수를 나타내는 변수 cnt를 1로 초기화합니다

무한 루프를 돌면서 숫자를 선택합니다. i 값을 2씩 증가시키며 배열 길이로 나머지 연산을 수행하여 인덱스를 유지합니다

numbers 배열에서 i 인덱스에 해당하는 숫자 item을 가져옵니다

cntk가 같아지면 선택된 숫자를 반환합니다

선택한 숫자의 개수를 1 증가시킵니다

반복이 계속되며 선택한 숫자의 개수가 k와 같아질 때까지 반복합니다

 

문제4 배열 회전시키기

정수가 담긴 배열 numbers와 문자열 direction가 매개변수로 주어집니다. 배열 numbers의 원소를 direction방향으로 한 칸씩 회전시킨 배열을 return하도록 solution 함수를 완성해주세요

제한사항

  • 3 ≤ numbers의 길이 ≤ 20
  • direction은 "left" 와 "right" 둘 중 하나입니다.

입출력 예

numbers direction result
[1, 2, 3] "right" [3, 1, 2]
[4, 455, 6, 4, -1, 45, 6] "left" [455, 6, 4, -1, 45, 6, 4]
function solution(numbers, direction) {
    if(direction === 'right'){
        const lastItem = numbers.pop()
        numbers.unshift(lastItem);
    }
    else {
        const firstItem = numbers.shift();
        numbers.push(firstItem);
    }
    return numbers;
}

주어진 방향이 'right'인 경우:

numbers 배열에서 마지막 요소를 제거하고 lastItem 변수에 저장합니다

lastItem을 배열의 맨 앞에 추가합니다. (unshift() 함수를 사용하여 추가)

주어진 방향이 'left'인 경우:

numbers 배열에서 첫 번째 요소를 제거하고 firstItem 변수에 저장합니다.

firstItem을 배열의 맨 뒤에 추가합니다. (push() 함수를 사용하여 추가)

수정된 numbers 배열을 반환합니다