공부/코딩테스트

코딩테스트 9

뀨뿌뀨뿌 2023. 5. 30. 21:44

Q.  머쓱이보다 키 큰 사람

머쓱이는 학교에서 키 순으로 줄을 설 때 몇 번째로 서야 하는지 궁금해졌습니다. 머쓱이네 반 친구들의 키가 담긴 정수 배열 array와 머쓱이의 키 height가 매개변수로 주어질 때, 머쓱이보다 키 큰 사람 수를 return 하도록 solution 함수를 완성해보세요.

🚫제한 사항
1 ≤ array의 길이 ≤ 100
1 ≤ height ≤ 200
1 ≤ array의 원소 ≤ 200

❗입출력 예

array height result
[149, 180. 192, 170] 167 3
[180, 120, 140] 190 0

😀 내가 푼 답

function solution(array, height) {
    return array.filter(x => x > height).length
}

😊 문제풀이 답안 OR 다른사람들 답안

// map
function solution(array, height) {
    let result = 0;
    array.map((arr) => height < arr && result++);

    return result;
}

// for
function solution(array, height) {
    var answer = 0;
    for (let i = 0; i < array.length; i++) {
        if (array[i] > height) {
            answer++
        }
    }
    return answer;
}

Q.  배열 두배 만들기

정수 배열 numbers가 매개변수로 주어집니다. numbers의 각 원소에 두배한 원소를 가진 배열을 return하도록 solution 함수를 완성해주세요.

🚫제한 사항
-10,000 ≤ numbers의 원소 ≤ 10,000
1 ≤ numbers의 길이 ≤ 1,000

❗입출력 예

array result
[1, 2, 3, 4, 5] [2, 4, 6, 8, 10]
[1, 2, 100, -99, 1, 2, 3] [2, 4, 200, -198, 2, 4, 6]

😀 내가 푼 답

function solution(numbers) {
    return numbers.map(x => x * 2)
}

😊 문제풀이 답안 OR 다른사람들 답안

function solution(numbers) {
    return numbers.reduce((a, b) => [...a, b * 2], []);
}
  • reduce()
    • 배열의 각 요소에 대해 주어진 함수를 실행하고, 하나의 결과값을 반환시킴
    • arr.reduce(callback[, initialValue])
      • callback
        ✔ 배열의 각 요소에 대해 실행할 함수
        네가지; 인수를 받음
        • accumulator
          누산기는 콜백의 반환값을 누적함
          콜백의 이전 리턴값 또는 콜백의 첫번째 호출이면서 initialValue를 제공한 경우에는 initialValue의 값'
          callback함수의 반환값은 accumulator에 할당되고 순회중 계속 누적되어 최종적으로 하나의 값을 리턴함

        • currentValue
          배열의 현재 요소
        • currentIndex
          배열의 현재 요소의 인덱스
          initialValue를 제공한 경우 0, 아니면 1부터 시작함
        • array
          reduce()를 호출한 배열
      • initialValue
        콜백함수의 최초 호출에서 첫 번째 인수에 제공하는 값
        초기값을 제공하지 않으면 배열의 첫 번째 요소를 사용함
        ✔ 빈 배열에서 초기값 없이 호출하면 오류가 발생함

Q.  삼각형의 완성조건(1)

선분 세 개로 삼각형을 만들기 위해서는 다음과 같은 조건을 만족해야 합니다.
❌ 가장 긴 변의 길이는 다른 두 변의 길이의 합보다 작아야 합니다.
삼각형의 세 변의 길이가 담긴 배열 sides이 매개변수로 주어집니다. 세 변으로 삼각형을 만들 수 있다면 1, 만들 수 없다면 2를 return하도록 solution 함수를 완성해주세요.

🚫제한 사항
sides의 원소는 자연수입니다.
sides의 길이는 3입니다.
1 ≤ sides의 원소 ≤ 1,000

❗입출력 예

sides result
[1, 2, 3] 2
[3, 6, 2] 2
[199, 72, 222] 1

😀 내가 푼 답

function solution(sides) {
  sides.sort((x, y) => y - x);
  return sides[0] < sides[1] + sides[2] ? 1 : 2;
}

😊 문제풀이 답안 OR 다른사람들 답안

function solution(sides) {
    sides.sort((a, b) => a - b);
    return ( sides.at(-1) < sides[0] + sides[1] ) ? 1 : 2;
};
  • at()
    • 정수 값을 받아 배열에서 해당 값에 해당하는 인덱스 요소를 반환함
    • 양수와 음수 모두 지정할 수 있고, 음수 값의 경우 배열의 뒤에서부터 인덱스를 셈
    • at()메서드를 사용하여 조금더 간략하게 표현할 수 있음
      ex) 맨 마지막 요소 반환방법
            arr[arr.lenght - 1]  =  arr.at(-1)
    • at(index)
      • index
        ✔ 배열에서 반환할 요소의 인덱스
        음수 값을 지정할 경우 배열의 마지막을 기준으로 한 인덱스
            => 배열 앞 대신 끝에서부터 위치를 계산함
        주어진 인덱스가 배열에 없으면 undefined를 반환함

Q.  배열의 중앙값 구하기

중앙값은 어떤 주어진 값들을 크기의 순서대로 정렬했을 때 가장 중앙에 위치하는 값을 의미합니다. 예를 들어 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

😀 내가 푼 답

function solution(array) {
  array.sort((x, y) => x - y);
  return array[Math.floor(array.length / 2)];
}

😊 문제풀이 답안 OR 다른사람들 답안

function solution(array) {
    return array.sort((a, b) => a - b)[parseInt(array.length / 2)];
}

Q.  짝수는 싫어요

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

🚫제한 사항
1 ≤ n ≤ 100

❗입출력 예

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

😀 내가 푼 답

function solution(n) {
  let arr = [];
  for (let i = 1; i <= n; i += 2) {
    arr.push(i);
  }
  return arr;
}

😊 문제풀이 답안 OR 다른사람들 답안

function solution(n) {
    return Array(n).fill(1).map((v, i) => v + i).filter(v => v % 2 !== 0);
}
  • Array()
    • 새로운 배열 객체를 생성할 때 사용함
  • fill()
    • 배열의 시작 인덱스부터 끝 인덱스의 이전까지 정적인 값 하나로 채워짐
    • arr.fill(value[, start[, end]})
      • value: 배열을 채울값
      • start: 시작 인덱스, 기본값은 0
      • end: 끝 인덱스, 기본값은 this.length

Q.  배열의 유사도

두 배열이 얼마나 유사한지 확인해보려고 합니다. 문자열 배열 s1과 s2가 주어질 때 같은 원소의 개수를 return하도록 solution 함수를 완성해주세요.

🚫제한 사항
1 ≤ s1, s2의 길이 ≤ 100
1 ≤ s1, s2의 원소의 길이 ≤ 10
s1과 s2의 원소는 알파벳 소문자로만 이루어져 있습니다
s1과 s2는 각각 중복된 원소를 갖지 않습니다.

❗입출력 예

s1 s2 result
["a", "b", "c"] ["com", "b", "d", "p", "c"] 2
["n", "omg"] ["m", "dot"] 0

😀 내가 푼 답

function solution(s1, s2) {
  return s1.filter((idx) => s2.includes(idx)).length;
}

😊 문제풀이 답안 OR 다른사람들 답안

// set1
function solution(s1, s2) {
  let arr1 = [...s1,...s2]
  let arr2 = Array.from(new Set(arr1))
  return arr1.length-arr2.length
}

// set2
const solution = (s1, s2) => s1.length + s2.length - Array.from(new Set(s1.concat(s2))).length;

 

'공부 > 코딩테스트' 카테고리의 다른 글

Q. 직사각형 별찍기  (0) 2023.06.16
코딩테스트 10  (0) 2023.05.31
코딩테스트 8  (1) 2023.05.29
코딩테스트 7  (0) 2023.05.29
코딩테스트 6  (0) 2023.05.26