코딩 공부/코딩테스트

자바스크립트 코딩테스트 입문 (3)

천서리 2023. 5. 18. 22:02
QUOTE THE DAY

“ 당신이 6개월 이상 한 번도 보지 않은 코드는 다른 사람이 다시 만드는 게 훨씬 더 나을 수 있다. ”

- 이글슨 (Eagleson)
반응형

코딩테스트 입문 Day 3 사칙연산, 배열, 수학

출처 : https://programmers.co.kr/

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 


나머지 구하기

문제

정수 num1num2가 매개변수로 주어질 때, num1를 num2로 나눈 나머지를 return 하도록 solution 함수를 완성해주세요.

 

 

제한사항

  • 0 < num1 ≤ 100
  • 0 < num2 ≤ 100

 

입출력 예

num1 num2 result
3 2 1
10 5 0

 

 

입출력 예 설명

 

입출력 예 #1

  • num1이 3, num2가 2이므로 3을 2로 나눈 나머지 1을 return 합니다.

입출력 예 #2

  • num1이 10, num2가 5이므로 10을 5로 나눈 나머지 0을 return 합니다.

 

solution.js

function solution(num1, num2) {
    var answer = num1 % num2;
    return answer;
}
  1. num1을 num2로 나눈 나머지를 answer 변수에 저장합니다. % 연산자는 나머지를 계산하는 연산자입니다.
  2. 계산된 answer 값을 반환합니다.

 


중앙값 구하기

문제

중앙값은 어떤 주어진 값들을 크기의 순서대로 정렬했을 때 가장 중앙에 위치하는 값을 의미합니다. 예를 들어 1, 2, 7, 10, 11의 중앙값은 7입니다. 정수 배열 array가 매개변수로 주어질 때, 중앙값을 return 하도록 solution 함수를 완성해보세요.

 

 

제한사항

  • array의 길이는 홀수입니다.
  • 0 < array의 길이 < 100
  • -1,000 < array의 원소 < 1,000

 

입출력 예

array result
[1, 2, 7, 10, 11] 7
[9, -1, 0] 0

 

 

입출력 예 설명

 

입출력 예 #1

  • 본문과 동일합니다.

입출력 예 #2

  • 9, -1, 0을 오름차순 정렬하면 -1, 0, 9이고 가장 중앙에 위치하는 값은 0입니다.

 

solution.js

function solution(array) {
  array.sort((a, b) => a - b);
  if (array.length % 2 === 1) {
    return array[Math.floor(array.length / 2)];
  }
    
  const midIndex = array.length / 2;
  return (array[midIndex - 1] + array[midIndex]) / 2;
}
  1. array 배열을 sort 함수를 사용하여 오름차순으로 정렬합니다. 정렬된 배열은 원래 배열에 영향을 주지 않고 새로운 배열을 반환합니다.
  2. 만약 array의 길이가 홀수인 경우, 즉 array.length % 2 === 1인 경우:
    • Math.floor(array.length / 2)를 사용하여 중앙 인덱스를 계산합니다. 홀수 길이의 배열에서 중앙값은 정확히 중앙에 위치한 요소입니다.
    • 해당 중앙 인덱스에 해당하는 값을 반환합니다.
  3. 만약 array의 길이가 짝수인 경우, 즉 array.length % 2 === 0인 경우:
    • array.length / 2를 사용하여 중앙에 위치하는 두 요소의 인덱스를 계산합니다. 짝수 길이의 배열에서 중앙값은 중앙에 위치한 두 요소의 평균값입니다.
    • 중앙에 위치하는 두 요소의 값을 더한 후, 2로 나눈 평균값을 반환합니다.

최빈값 구하기

문제

최빈값은 주어진 값 중에서 가장 자주 나오는 값을 의미합니다. 정수 배열 array가 매개변수로 주어질 때, 최빈값을 return 하도록 solution 함수를 완성해보세요. 최빈값이 여러 개면 -1을 return 합니다.

 

 

제한사항

  • 0 < array의 길이 < 100
  • 0 ≤ array의 원소 < 1000

 

입출력 예

array result
[1, 2, 3, 3, 3, 4] 3
[1, 1, 2, 2] -1
[1] 1

 

 

입출력 예 설명

 

입출력 예 #1

  • [1, 2, 3, 3, 3, 4]에서 1은 1개 2는 1개 3은 3개 4는 1개로 최빈값은 3입니다.

입출력 예 #2

  • [1, 1, 2, 2]에서 1은 2개 2는 2개로 최빈값이 1, 2입니다. 최빈값이 여러 개이므로 -1을 return 합니다.

입출력 예 #3

  • [1]에는 1만 있으므로 최빈값은 1입니다.

 

solution.js

function solution(array) {
  const frequency = {};

  for (let i = 0; i < array.length; i++) {
    if (frequency[array[i]] === undefined) {
      frequency[array[i]] = 1;
    } else {
      frequency[array[i]]++;
    }
  }

  let maxCount = 0;
  let mode = [];

  for (const key in frequency) {
    const count = frequency[key];
    if (count > maxCount) {
      maxCount = count;
      mode = [parseInt(key)];
    } else if (count === maxCount) {
      mode.push(parseInt(key));
    }
  }

  if (mode.length > 1) {
    return -1;
  }

  return mode[0];
}
  1. frequency라는 빈 객체를 생성합니다. 이 객체는 각 값의 등장 횟수를 기록하기 위해 사용됩니다.
  2. 반복문을 통해 배열 array를 순회하면서 각 요소의 등장 횟수를 frequency 객체에 기록합니다.
    • 만약 frequency 객체에 해당 요소가 없다면, 등장 횟수를 1로 설정합니다.
    • 이미 frequency 객체에 해당 요소가 있다면, 등장 횟수를 1 증가시킵니다.
  3. maxCount 변수를 0으로 초기화합니다. 이 변수는 가장 많이 등장한 횟수를 저장합니다.
  4. mode라는 빈 배열을 생성합니다. 이 배열은 최빈값을 저장하기 위해 사용됩니다.
  5. 객체 frequency를 순회하면서 최빈값을 찾습니다.
    • 각 키(key)에 해당하는 등장 횟수(count)를 가져옵니다.
    • 만약 count가 현재까지의 최빈값 maxCount보다 크다면, maxCount를 count로 업데이트하고 mode 배열에 현재 키(key)를 넣어줍니다.
    • 만약 count가 maxCount와 같다면, mode 배열에 현재 키(key)를 추가합니다.
  6. mode 배열의 길이가 1보다 크다면, 최빈값이 여러 개이므로 -1을 반환합니다.
  7. 그렇지 않은 경우, mode 배열의 첫 번째 요소를 반환합니다. 이 값은 최빈값입니다.

짝수는 싫어

문제

정수 n이 매개변수로 주어질 때, n 이하의 홀수가 오름차순으로 담긴 배열을 return하도록 solution 함수를 완성해주세요.

 

 

제한사항

  • 1 ≤ n ≤ 100

 

입출력 예

n result
10 [1, 3, 5, 7, 9]
15 [1, 3, 5, 7, 9, 11, 13, 15]

 

 

입출력 예 설명

 

입출력 예 #1

  • 10 이하의 홀수가 담긴 배열 [1, 3, 5, 7, 9]를 return합니다.

입출력 예 #2

  • 15 이하의 홀수가 담긴 배열 [1, 3, 5, 7, 9, 11, 13, 15]를 return합니다.

 

solution.js

function solution(n) {
  var answer = [];

  for (let i = 1; i <= n; i += 2) {
    answer.push(i);
  }

  return answer;
}
  1. answer라는 빈 배열을 생성합니다. 이 배열은 결과값을 저장하기 위해 사용됩니다.
  2. 반복문을 통해 i를 1부터 n까지 2씩 증가시키면서 순회합니다. (i += 2는 i를 2씩 증가시키는 것을 의미합니다.)
  3. 각 반복에서 i 값을 answer 배열에 추가합니다.
  4. 반복문이 종료되면, 완성된 answer 배열을 반환합니다.
반응형
Adventure Time - BMO