[JS] 코딩테스트 연습 - 4 (TIL)

이해용·2022년 9월 16일
0
post-thumbnail

없는 숫자 더하기

문제 설명
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(numbers) {
    return 45 - numbers.reduce((a, b) => a +b);
}
  1. 조건에서 numbers의 모든 원소는 1에서 9까지이기 때문에 1에서 9까지 총 합은 45이다.
  2. 45에서 numbers 배열의 모두 더한 값을 뺀다면 result에 결과가 나올 수 있다고 생각이 들었다.

다른 풀이

function solution(numbers) {
  let result = 0;
  for (let i = 0; i <=9; i++) {
    if (!numbers.includes(i)) {
      result += i;
    }
  } return result;
}

includes 메서드를 활용하면 for문을 사용했을 때 boolean으로 numbers 배열에 for문에 선언된 i가 false일 때 추가 할 수 있는 활용법에 대해 알게 되었다.

내적

문제 설명
길이가 같은 두 1차원 정수 배열 a, b가 매개변수로 주어집니다. a와 b의 내적을 return 하도록 solution 함수를 완성해주세요.

이때, a와 b의 내적은 a[0]*b[0] + a[1]*b[1] + ... + a[n-1]*b[n-1] 입니다. (n은 a, b의 길이)

제한사항
a, b의 길이는 1 이상 1,000 이하입니다.
a, b의 모든 수는 -1,000 이상 1,000 이하입니다.

입출력 예

abresult
[1,2,3,4][-3,-1,0,2]3
[-1,0,1][1,0,-1]-2

입출력 예 설명

입출력 예 #1

a와 b의 내적은 1*(-3) + 2*(-1) + 3*0 + 4*2 = 3 입니다.

입출력 예 #2

a와 b의 내적은 (-1)*1 + 0*0 + 1*(-1) = -2 입니다.

나의 풀이

function solution(a, b) {
	let result = 0;
  		for (let i = 0; i < a.length; i++) {
      		result += a[i]*b[i];
    	}
    return result; 
}
  1. a 배열과 b 배열의 길이가 같기 때문에 for문을 사용하여 배열의 순서에 맞는 값에 값을 곱해주어 result에 더해주면 원하는 값이 나올 것이라는 생각이 들었다.

다른 풀이

function solution(a, b) {
    return a.reduce((acc, cur, i) => acc += a[i]*b[i], 0)
}

reduce를 사용하여 for문과 같은 효과를 낼 수 있다는 것에 놀라웠다. reduce에 대해 더 많이 공부를 해야할 것 같다는 생각이 들었다.

문자열 내림차순으로 배치하기

문제 설명

문자열 s에 나타나는 문자를 큰것부터 작은 순으로 정렬해 새로운 문자열을 리턴하는 함수, solution을 완성해주세요.
s는 영문 대소문자로만 구성되어 있으며, 대문자는 소문자보다 작은 것으로 간주합니다.

제한 사항

  • str은 길이 1 이상인 문자열입니다.

입출력 예

sreturn
"Zbcdefg""gfedcbZ"

나의 풀이

function solution(s) {
    return s.split('').sort((a, b) => 
    a > b ? -1 : 1).join('');
}
  1. 문자열을 split() 메서드를 사용하여 배열로 분리한다.
  2. 문자열을 내림차순으로 정렬하기 위해 sort() 메서드를 사용한다.
    2-1. 기본 sort() 메서드는 오름차순으로 정렬되기 때문에 내림차순으로 정렬하는 방법을 사용했다.
  3. join() 메서드를 사용하여 문자열을 합친다.

다른 풀이

function solution(s) {
  return s.split('').sort().reverse().join('');
}

sort() 메서드안에서 내림차순으로 정렬하는 방법도 있지만 reverse() 메서드를 사용해서 내림차순으로 변경하는 방법도 있다는 것에 대해 알게 되었다.

reference
https://school.programmers.co.kr/
https://www.w3schools.com/jsref/jsref_includes_array.asp
https://developer.mozilla.org/ko/docs/Web/JavaScript/Reference/Global_Objects/Array/sort

profile
프론트엔드 개발자입니다.

0개의 댓글