본문 바로가기
코딩테스트/프로그래머스 0단계 - 입문

프로그래머스 0단계 - Day10 조건문, 배열, 수학, 시뮬레이션

by 학습하는 청년 2024. 3. 18.

점의 위치 구하기

사분면은 한 평면을 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이 아닙니다.
function solution(dot) {
    const x = dot[0];
    const y = dot[1];
    
    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;
}

// 다른 사람의 풀이
function solution(dot) {
  const [x, y] = 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;
}

function solution(dot) {
    const [num,num2] = dot;
    const check = num * num2 > 0;
    return num > 0 ? (check ? 1 : 4) : (check ? 3 : 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의 배 수개입니다.
  • 0 ≤ num_list의 길이 ≤ 150
  • 2 ≤ n < num_list의 길이
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;
}

// 다른 사람의 풀이
function solution(num_list, n) {
    var answer = [];
    while(num_list.length) {
        answer.push(num_list.splice(0,n));
    }
    return answer;
}

function solution(num_list, n) {
    return Array(num_list.length / n).fill([]).map(() => num_list.splice(0, n))
}

<다른 사람의 풀이에 대한 이해>

splice()

 

fill()

map()


공 던지기

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

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

// 다른 사람의 풀이
function solution(numbers, k) {
    return numbers[((2 * (k -1))) % numbers.length];
}

배열의 요소가 반복되는 경우, 나머지 연산자를 활용하면 된다!

 

<다른 사람의 풀이에 대한 이해>

k-1 후 2를 곱한 만큼 움직임, 움직이는 거리가 배열의 길이를 초과한 경우를 위해 배열길이로 모듈러연산


배열 회전시키기

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

  • 3 ≤ numbers의 길이 ≤ 20
  • direction은 "left" 와 "right" 둘 중 하나입니다.
function solution(numbers, direction) {
    const answer = [];
    if(direction === 'right') {
        answer.push(numbers[numbers.length - 1]);
        for(let i = 0; i < numbers.length - 1; i++) {
            answer.push(numbers[i]);
        }
    } else {
        for(let i = 1; i <numbers.length; i++) {
            answer.push(numbers[i]);
        }
        answer.push(numbers[0]);
    }
    return answer;
}

// 다른 사람의 풀이
function solution(numbers, direction) {
    const answer = [];
    if(direction === 'right') {
        answer.push(numbers[numbers.length - 1]);
        for(let i = 0; i < numbers.length - 1; i++) {
            answer.push(numbers[i]);
        }
    } else {
        for(let i = 1; i <numbers.length; i++) {
            answer.push(numbers[i]);
        }
        answer.push(numbers[0]);
    }
    return answer;
}

// 다른 사람의 풀이
function solution(numbers, direction) {
    const answer = [];
    if(direction === 'right') {
        answer.push(numbers[numbers.length - 1]);
        for(let i = 0; i < numbers.length - 1; i++) {
            answer.push(numbers[i]);
        }
    } else {
        for(let i = 1; i <numbers.length; i++) {
            answer.push(numbers[i]);
        }
        answer.push(numbers[0]);
    }
    return answer;
}

// 다른 사람의 풀이
function solution(numbers, direction) {
    direction === 'right' ?
      numbers.unshift(numbers.pop()) : numbers.push(numbers.shift());
    return numbers;
}

<다른 사람의 풀이에 대한 이해>

배열 메소드를 활용

- unshift()

- pop()


참고 영상

https://youtu.be/H14YOU8qGV8?si=zcQEsk1YlsBIKv4K

댓글