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

프로그래머스 0단계 - Day8 배열, 구현, 수학

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

배열 자르기

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

  • 2 ≤ numbers의 길이 ≤ 30
  • 0 ≤ numbers의 원소 ≤ 1,000
  • 0 ≤num1 < num2 < numbers의 길이
function solution(numbers, num1, num2) {
    return numbers.splice(num1, num2-num1+1);
}

// 다른 사람의 풀이
function solution(numbers, num1, num2) {
  let cnt = num1;
  let answer = [];
  while(cnt <= num2) {
    answer.push(numbers[cnt]);
    cnt += 1;
  }
  return answer;
}

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

splice(start, end)

 

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

반복문을 활용한 풀이

 

slice()

 

Q. splice()와 slice()의 차이는 무엇인가?


외계행성의 나이

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

  • age는 자연수입니다.
  • age ≤ 1,000
  • PROGRAMMERS-962 행성은 알파벳 소문자만 사용합니다.
function solution(age) {
  let answer = '';
  const stringAge = String(age);
  
  let cnt = 0;
  while(cnt < stringAge.length) {
    answer += String.fromCharCode(stringAge[cnt].charCodeAt(0) + 49);
    cnt += 1;
  }
  return answer;
}

// 다른 사람의 풀이
function solution(age) {
  return age
    .toString()
    .split("")
    .map((v) => "abcdefghij"[v])
    .join("");
}

replace()를 사용하거나 if문으로 일일히 변하는 방법이 있지만, ASCII값을 활용하면 반복문으로 처리할 수 있다.

- fromCharCode()

- fromCodeAt()

 

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

toString()

split()

map()

join()


진료순서 정하기

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

  • 중복된 원소는 없습니다.
  • 1 ≤ emergency의 길이 ≤ 10
  • 1 ≤ emergency의 원소 ≤ 100
function solution(emergency) {
    let newEmergencyArray = [];
    
    let i = 0;
    while(i < emergency.length) {
        newEmergencyArray.push({value: emergency[i], idx: i});
        i++;
    }
    newEmergencyArray.sort((a, b) => b.value - a.value);
    
    let answer = new Array(emergency.length);
    
    i = 0;
    while(i < newEmergencyArray.length) {
        let item = newEmergencyArray[i];
        answer[item.idx] = i + 1;
        i += 1;
    }
    return answer;
}

// 다른 사람의 풀이
function solution(emergency) {
    let sorted = emergency.slice().sort((a,b)=>b-a);
    return emergency.map(v=>sorted.indexOf(v)+1);
}

function solution(emergency) {
    const temp = [...emergency].sort((a,b)=>b-a)

sort()

 

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

slice()

map()

indexOf()


순서쌍의 개수

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

  • 1 ≤ n ≤ 1,000,000
// 약수의 갯수와 같은 문제
// 20 => 1, 2, 4, 5, 10, 20
// 100 => 1, 2, 4, 5, 10, 20, 25, 50, 100

function solution(n) {
    let answer = 0;
    let divNumber = 1;
    while(divNumber <= n) {
        if(n % divNumber === 0) answer++;
        divNumber++;
    }
    
    return answer;
}

 


참고 영상

https://youtu.be/3CoRaQtXpEs?si=tAt-jbuky12mz2RI

댓글