코딩테스트 연습(Lv0 / 030 ~ 033)- Day08 배열, 구현, 수학

Kang.__.Mingu·2023년 1월 6일
0

코딩테스트(Lv0)

목록 보기
9/26

배열 자르기

배열 자르기

문제

정수 배열 numbers와 정수 num1, num2가 매개변수로 주어질 때, numbers의 num1번 째 인덱스부터 num2번째 인덱스까지 자른 정수 배열을 return 하도록 solution 함수를 완성해보세요.


function solution(numbers, num1, num2) {
    return numbers.slice(num1, num2 + 1);
}

// numbers 배열 중 num1번째 인덱스부터 num2번째 인덱스까지
// 자른 정수 배열을 return 하라

외계행성의 나이

외계행성의 나이

문제

우주여행을 하던 머쓱이는 엔진 고장으로 PROGRAMMERS-962 행성에 불시착하게 됐습니다. 입국심사에서 나이를 말해야 하는데, PROGRAMMERS-962 행성에서는 나이를 알파벳으로 말하고 있습니다. a는 0, b는 1, c는 2, ..., j는 9입니다. 예를 들어 23살은 cd, 51살은 fb로 표현합니다. 나이 age가 매개변수로 주어질 때 PROGRAMMER-962식 나이를 return하도록 solution 함수를 완성해주세요.


function solution(age) {
    age = age.toString();
    // let ageArr = [...age];
    let pro = ['a','b','c','d','e','f','g','h','i','j'];
    let str = '';
    for(const i of age){
        str = str + pro[i];
    }
    return str;
}

고민 많이 함

문제를 보면 'a는 0, b는 1, c는 2, ..., j는 9입니다'라고 되어있다. 자세히 보면 배열의 요소와 배열의 인덱스라는 것을 알 수 있었다.
1. age는 숫자이기 때문에 toString()을 사용하여 문자열로 만든다.
2. a ~ j가 들어있는 배열을 만든다.
3. 빈 문자를 생성한다.

  1. for of를 이용해여 age문자열의 숫자요소?가 a ~j가 들어있는배열의 인덱스 번호이기 때문에 해당 인덱스 번호의 요소를 가져와 문자형에 더해주면 된다.

진료순서 정하기

진료 순서 정하기

문제

외과의사 머쓱이는 응급실에 온 환자의 응급도를 기준으로 진료 순서를 정하려고 합니다. 정수 배열 emergency가 매개변수로 주어질 때 응급도가 높은 순서대로 진료 순서를 정한 배열을 return하도록 solution 함수를 완성해주세요.


문제를 보고 이해를 못 했다.

문제를 읽어봤을 때 응급도가 높은 순서대로 진료 순서를 정하면 emergency 배열을 내림차순으로 정렬을 해야 한다는 생각만 있었다. 하지만 내림차순으로 정렬했을 때 return 할 값의 배열도 내림차순이 정렬된다고 생각하였다.
20분간 고민해 봤지만 어떤 방식으로 진행해야 할지 몰라서 다른 사람의 풀이를 보았더니 바로 이해가 되었다.

다른 사람 풀이

function solution(emergency) {
	let sorted = [...emergency].sort((a,b) => b - a);
    let arr = emergency.map((i) => sorted.indexOf(i) + 1);
    return arr;
    console.log(emergency);
    console.log(sorted);
    console.log(arr);
}

입출력 예 1번

첫번째 줄: emergency 원본 배열
두번째 줄: 내림차순 정렬한 배열
세번째 줄: map()을 이용하여 새로 담은 배열

  1. 원본 배열에서 복사해와 내림차순으로 정렬한다.
  2. map()을 사용하여 emergency 배열의 요소를 하나씩 꺼내와 정렬한 배열 sorted에서 indexOf를 통해 해당 요소의 인덱스 번호를 새로운 배열에 담아서 return

코딩 테스트 문제 풀 때 어떠한 방식으로 접근해야 할지 아직 감을 잡지 못하겠다. 다른 사람 코드를 보고 내 걸로 만들기 위해 생각해 보았다.

내 걸로 만들기 위해 생각해 본 코드

    let sorted = [...emergency].sort((a,b) => b - a);
    let arr = [];
    let ph;
    for(let i of emergency){
        ph = sorted.indexOf(i) + 1;
        arr.push(ph);
    }
    return arr;

익숙한 for문으로 풀어보았다.
위에 풀이와 다른점이 있다면 push..?가 끝이다.


순서쌍의 개수

순서쌍의 개수

문제

순서쌍이란 두 개의 숫자를 순서를 정하여 짝지어 나타낸 쌍으로 (a, b)로 표기합니다. 자연수 n이 매개변수로 주어질 때 두 숫자의 곱이 n인 자연수 순서쌍의 개수를 return하도록 solution 함수를 완성해주세요.


function solution(n) {
    const num = [];
    for(let i = 0; i <= n; i++){
        if(n % i === 0){
            num.push(i);
        }
    }
    return num.length;
}

두 숫자의 곱이 n인 자연수 순서쌍의 개수를 return하는 문제이기 때문에 n의 약수의 개수를 구하면 될 것이라고 생각했다.
20을 예로 20 나눠 나머지가 0이 되는 것이면 다 약수이다.
20의 약수는 1,2,4,5,10,20로 6개이다.

순서쌍을 만들어서 return하는 문제였다면 만들어야 했지만 중요 요점은 순서쌍의 개수를 return하는 문제이기에 약수를 배열에 넣고 배열의 개수를 return 했다.

profile
최선을 다해 꾸준히 노력하는 개발자 망고입니당 :D

0개의 댓글