[알고리즘]프로그래머스 0단계 뽀개기(Day10)

HIHI JIN·2023년 2월 1일

알고리즘

목록 보기
8/29
post-thumbnail

Day 10

점의 위치 구하기

사분면은 한 평면을 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 함수를 완성해주세요.

//내 코드
function solution(dot) {
    if(dot[0]>0 && dot[1]>0) return 1;
    if(dot[0]<0 && dot[1]>0) return 2;
    if(dot[0]<0 && dot[1]<0) return 3;
    if(dot[0]>0 && dot[1]<0) return 4;

}
//dot은[x,y]좌표
//음수, 양수에 따라 사분면을 리턴

//다른 사람 코드
function solution(dot) {
    const [num,num2] = dot;
    const check = num * num2 > 0;
    return num > 0 ? (check ? 1 : 4) : (check ? 3 : 2);
}//구조분해할당 이용
//또 다른 사람 코드
function solution(dot) {
    return dot[0] > 0 ? dot[1] > 0 ? 1 : 4 : dot[1] > 0 ? 2 : 3;
}//연속 삼항연산자 사용

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) {
    var answer = [];
    for(let x=2; x<num_list.length; x++){
    if(n===x){
        for(let i=0; i<num_list.length; i+=x){
            answer.push(num_list.slice(i,i+x));
            }
        }
    }
return answer;
}
//숫자 n만큼 배열 numlist에서 요소들을 배열로 묶어라
//x는 2부터 점점 증가한다. n의 숫자와 x의 숫자가 같다면,묶는 개수를 정하는 i는 x만큼 증가하여 반복한다.
//묶는 개수는 i,i+x로 정하여 slice로 복사하고 answer에 넣어준다.

//다른 사람 코드
function solution(num_list, n) {
    var answer = [];

    while(num_list.length) {
        answer.push(num_list.splice(0,n));
    }
    return answer;
}//splice로 원본배열을 바꾸면서 answer에 넣어준다.
//처음은 splice(0,2) = [0,1]을 잘라서 answer에 push
//두번째 splice(0,2) = [2,3]을 잘라서 answer에 push
//두번째 splice(0,2) = [4,5]을 잘라서 answer에 push...

//또 다른 사람 코드
function solution(num_list, n) {
    var answer = [];
    for (let i = 0; i<num_list.length; i=i+n){
        answer.push(num_list.slice(i, i+n));
    }
    return answer;
}//내 코드를 더 줄인 코드이다. 나는 x를 요소로 한 for문을 한번 더 돌렸는데, 사실 그럴 필요가 없었고 n으로 대체하면 되었다.

공 던지기

머쓱이는 친구들과 동그랗게 서서 공 던지기 게임을 하고 있습니다. 공은 1번부터 던지며 오른쪽으로 한 명을 건너뛰고 그다음 사람에게만 던질 수 있습니다. 친구들의 번호가 들어있는 정수 배열 numbers와 정수 K가 주어질 때, k번째로 공을 던지는 사람의 번호는 무엇인지 return 하도록 solution 함수를 완성해보세요.
2 < numbers의 길이 < 100
0 < k < 1,000
numbers의 첫 번째와 마지막 번호는 실제로 바로 옆에 있습니다.
numbers는 1부터 시작하며 번호는 순서대로 올라갑니다.

//내 코드
function solution(numbers, k) {
    return numbers[(k - 1) * 2 % numbers.length];
}
//numbers는 정수 배열, k번째로 공던지는 사람의 번호 리턴
//x번째로 던져진 지점이 아니라 던진 사람이기 때문에 k - 1을 해주고, 한 사람씩 건너뛰므로 2를 곱해준 값을 배열의 크기로 나눈 index의 숫자가 답.

//다른 사람 코드

배열 회전시키기

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

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

입출력 예 #1
numbers 가 [1, 2, 3]이고 direction이 "right" 이므로 오른쪽으로 한 칸씩 회전시킨 [3, 1, 2]를 return합니다.
입출력 예 #2
numbers 가 [4, 455, 6, 4, -1, 45, 6]이고 direction이 "left" 이므로 왼쪽으로 한 칸씩 회전시킨 [455, 6, 4, -1, 45, 6, 4]를 return합니다.

//내 코드
function solution(numbers, direction) {
    if(direction==="right"){
        numbers.unshift(numbers[numbers.length-1]);
        numbers.pop();
    }else{
        numbers.push(numbers[0]);
        numbers.shift();
    }
    return numbers;
}
//배열 numbers 의 요소를 direction방향으로 한칸씩 회전 시킨 배열 리턴
//left면 맨뒤에 요소를 자르고, 앞으로 가져온다
//right면 맨앞의 요소를 자르고, 뒤로 가져온다.

//다른 사람 코드
function solution(numbers, direction) {
    if ("right" == direction) {
        numbers.unshift(numbers.pop());
    } else {
        numbers.push(numbers.shift());
    }
    return numbers;
}//나도 numbers에 unshift와 pop을 같이 쓰고 싶었는데 연결해서 쓰니 안되었는데
//()안에 넣어서 사용하면 해결된다.
//괄호안이 실행되고 난 뒤에 바깥 코드가 실행된다기 보다,
//괄호안이 실행한 것을 가지고 바깥 코드가 실행된다.
//괄호안의 numbers.pop()은 뒤에꺼를 잘라내기 한것을 numbers앞에 그대로 붙인다.
//left인 경우, numbers.shift()로 앞에꺼를 잘라내기 한 것을 numbers뒤에 붙인다.
profile
신입 프론트엔드 웹 개발자입니다.

1개의 댓글

comment-user-thumbnail
2023년 2월 3일

다른 분들 블로그보다 훨씬 깔끔하고 눈에 확 들어오는 느낌이네요!! 오늘도 자극 받고 갑니다ㅎㅎ

답글 달기