개발/javascript

간단한 자바스크립트 코딩 테스트 몇가지(2)

희운1205 2022. 4. 26. 15:41
반응형

간단한 자바스크립트 코딩 테스트(2)

1. 비어있는 숫자 더하기

질문: 0부터 9까지의 숫자 중 일부가 들어있는 정수 배열 numbers가 매개변수로 주어집니다. 
numbers에서 찾을 수 없는 0부터 9까지의 숫자를 모두 찾아 더한 수를 return 하도록 solution 함수를 완성해주세요.

1 ≤ numbers의 길이 ≤ 9
0 ≤ numbers의 모든 원소 ≤ 9
numbers의 모든 원소는 서로 다릅니다.

입출력 예
numbersresult
[1,2,3,4,6,7,8,0] 14
[5,8,4,0,6,7,9] 6

입출력 예 #1
5, 9가 numbers에 없으므로, 5 + 9 = 14를 return 해야 합니다.
입출력 예 #2
1, 2, 3이 numbers에 없으므로, 1 + 2 + 3 = 6을 return 해야 합니다.

결과

function solution(arr) {
  var answer = 0;
  for (let i = 0; i <= 9; i++) {
    // includes 사용시 (배열에 지정된 요소가 없으면 false)
    if (!arr.includes(i)) {
      answer += i;
    }

    // indexOf 사용시 (배열에 지정된 요소가 없으면 -1를 반환)
    /*
  if(arr.indexOf(i) === -1) {
 answer += i;
  }
    */
  }

  return answer
}
console.log(solution([1,2,3,4,6,7,8,0])); // 14
console.log(solution([5,8,4,0,6,7,9])); // 6

2. 같은 숫자는 싫어

질문 : 배열 arr가 주어집니다. 배열 arr의 각 원소는 숫자 0부터 9까지로 이루어져 있습니다. 
이때, 배열 arr에서 연속적으로 나타나는 숫자는 하나만 남기고 전부 제거하려고 합니다. 단, 제거된 후 남은 수들을 반환할 때는 배열 arr의 원소들의 순서를 유지해야 합니다. 예를 들면,

arr = [1, 1, 3, 3, 0, 1, 1] 이면 [1, 3, 0, 1] 을 return 합니다.
arr = [4, 4, 4, 3, 3] 이면 [4, 3] 을 return 합니다.
배열 arr에서 연속적으로 나타나는 숫자는 제거하고 남은 수들을 return 하는 solution 함수를 완성해 주세요.

제한사항
배열 arr의 크기 : 1,000,000 이하의 자연수
배열 arr의 원소의 크기 : 0보다 크거나 같고 9보다 작거나 같은 정수
 
입출력 예
arr answer
[1,1,3,3,0,1,1] [1,3,0,1]
[4,4,4,3,3] [4,3]

결과

function solution(arr) {
   var answer = [];
   for(var i=0; i < arr.length; i++) {
       if(arr[i] !== arr[i+1]) {
         answer.push(arr[i]);
       }
   }
   
   return answer
}
console.log(solution([1,1,3,3,0,1,1])); // [1,3,0,1]
console.log(solution([4,4,4,3,3])); // [4,3]

3. 완주하지 못한 선수

문제 : 수많은 마라톤 선수들이 마라톤에 참여하였습니다. 단 한 명의 선수를 제외하고는 모든 선수가 마라톤을 완주하였습니다. 마라톤에 참여한 선수들의 이름이 담긴 배열 participant와 완주한 선수들의 이름이 담긴 배열 completion이 주어질 때,  완주하지 못한 선수의 이름을 return 하도록 solution 함수를 작성해주세요.

마라톤 경기에 참여한 선수의 수는 1명 이상 100,000명 이하입니다.
completion의 길이는 participant의 길이보다 1 작습니다.
참가자의 이름은 1개 이상 20개 이하의 알파벳 소문자로 이루어져 있습니다.
참가자 중에는 동명이인이 있을 수 있습니다.

입출력 예
participant completion return
["leo", "kiki", "eden"] ["eden", "kiki"] "leo"
["marina", "josipa", "nikola", "vinko", "filipa"] ["josipa", "filipa", "marina", "nikola"] "vinko"
["mislav", "stanko", "mislav", "ana"] ["stanko", "ana", "mislav"] "mislav"

입출력 예 설명
예제 #1
"leo"는 참여자 명단에는 있지만, 완주자 명단에는 없기 때문에 완주하지 못했습니다.

예제 #2
"vinko"는 참여자 명단에는 있지만, 완주자 명단에는 없기 때문에 완주하지 못했습니다.

예제 #3
"mislav"는 참여자 명단에는 두 명이 있지만, 완주자 명단에는 한 명밖에 없기 때문에 한명은 완주하지 못했습니다.

function solution(parti, comp) {
  let answer = [];
  if (parti && comp) {
    parti.sort();
    comp.sort();
    for (var i = 0; i < parti.length; i++) {
      if (parti[i] !== comp[i]) {
        answer = parti[i];
        break;
      }
    }
  }
  return answer;
}
console.log(solution(["leo", "kiki", "eden"],["eden", "kiki"])); 
// "leo"

console.log(solution(["marina", "josipa", "nikola", "vinko", "filipa"],["josipa", "filipa", "marina", "nikola"]));
// "vinko"

console.log(solution(["mislav", "stanko", "mislav", "ana"],["stanko", "ana", "mislav"]));
// mislav

4. 최소직사각형 구하기

문제 : 모든 명함의 가로 길이와 세로 길이를 나타내는 2차원 배열 sizes가 매개변수로 주어집니다. 
모든 명함을 수납할 수 있는 가장 작은 지갑을 만들 때, 지갑의 크기를 return 하도록 solution 함수를 완성해주세요.

sizes의 원소는 [w, h] 형식입니다.
w는 명함의 가로 길이를 나타냅니다.
h는 명함의 세로 길이를 나타냅니다.
w와 h는 1 이상 1,000 이하인 자연수입니다.

입출력 예

사이즈 결과
[[60, 50], [30, 70], [60, 30], [80, 40]] 4000
[[10, 7], [12, 3], [8, 15], [14, 7], [5, 15]] 120
[[14, 4], [19, 6], [6, 16], [18, 7], [7, 11]] 133

function solution(sizes) {
  var answer = 0;
  var max1 = 0;
  var max2 = 0

  for (const x in sizes) {
    /* spread구문 쓰지 않고 일반적인 구문으로 사용시
    max1 = Math.max(max1, Math.max(sizes[x][0], sizes[x][1]));
    max2 = Math.max(max2, Math.min(sizes[x][0], sizes[x][1]));
    */    
    
    
    max1 = Math.max(max1, Math.max(...sizes[x]));
    max2 = Math.max(max2, Math.min(...sizes[x]));
  }

  answer = max1 * max2;
  return answer;
}

console.log(solution([[60, 50], [30, 70], [60, 30], [80, 40]])); // 4000
console.log(solution([[10, 7], [12, 3], [8, 15], [14, 7], [5, 15]])); // 120
console.log(solution([[14, 4], [19, 6], [6, 16], [18, 7], [7, 11]])); // 133
반응형