본문 바로가기

Algorithm

Algorithm[공부: 최댓값과 최솟값]

반응형

최댓값과 최솟값

문제 설명(ref)

문자열 s에는 공백으로 구분된 숫자들이 저장되어 있습니다. str에 나타나는 숫자 중 최소값과 최대값을 찾아 이를 "(최소값) (최대값)"형태의 문자열을 반환하는 함수, solution을 완성하세요.
예를들어 s가 "1 2 3 4"라면 "1 4"를 리턴하고, "-1 -2 -3 -4"라면 "-4 -1"을 리턴하면 됩니다.

제한 조건
  • s에는 둘 이상의 정수가 공백으로 구분되어 있습니다.
입출력 예
s return
"1 2 3 4" "1 4"
"-1 -2 -3 -4" "-4 -1"
"-1 -1" "-1 -1"

내 코드

Logic
띄여쓰기 단위로 구분을 만들어서
숫자를 정렬하여서 가장 낮은 숫자와 가장 높은 숫자를 추출후
결과값에 맞게 데이터수정후 출력
function solution(s) {
  // console.log("s:",s)
  // 띄여쓰기 단위로 분리
  let arr = s.split(' ');
  // console.log("arr:",arr)

  // 인자타입을 Number로 변경
  for (let i = 0; i < arr.length; i++) {
    arr[i] = Number(arr[i]);
  }
  // console.log("arr:",arr)
  // 정렬
  arr.sort((a, b) => a - b);
  // console.log("arr:",arr)
  let answer = '';
  // 제일 작은수와 제일 높은 수를 원하는 형태로 출력
  answer = `${arr[0]} ${arr[arr.length - 1]}`;
  return answer;
}
정확성 테스트
테스트 1 통과 (0.16ms, 30.1MB)
테스트 2 통과 (0.12ms, 30MB)
테스트 3 통과 (0.11ms, 29.9MB)
테스트 4 통과 (0.10ms, 30MB)
테스트 5 통과 (0.33ms, 30.2MB)
테스트 6 통과 (0.11ms, 30MB)
테스트 7 통과 (0.07ms, 29.9MB)
테스트 8 통과 (0.12ms, 29.9MB)
테스트 9 통과 (0.10ms, 29.9MB)
테스트 10 통과 (0.14ms, 30.1MB)
테스트 11 통과 (0.08ms, 29.8MB)
테스트 12 통과 (0.15ms, 29.9MB)
 

다른 사람 코드1

function solution(s) {
  const arr = s.split(' ');
  // 나누어서 문자열로 최댓값 최솟값 출력
  return Math.min(...arr) + ' ' + Math.max(...arr);
}
Logic
띄여쓰기 단위로 구분을 만들어서
숫자를 정렬하여서 가장 낮은 숫자와 가장 높은 숫자를 추출후
결과값에 맞게 데이터수정후 출력
정확성 테스트
테스트 1 통과 (0.06ms, 30MB)
테스트 2 통과 (0.07ms, 29.9MB)
테스트 3 통과 (0.04ms, 30.2MB)
테스트 4 통과 (0.05ms, 30.2MB)
테스트 5 통과 (0.30ms, 30.3MB)
테스트 6 통과 (0.06ms, 29.9MB)
테스트 7 통과 (0.05ms, 30.2MB)
테스트 8 통과 (0.06ms, 30MB)
테스트 9 통과 (0.06ms, 30.1MB)
테스트 10 통과 (0.06ms, 29.9MB)
테스트 11 통과 (0.10ms, 30.2MB)
테스트 12 통과 (0.06ms, 30MB)

문자열로도 max, min가능 

내부적으로 모든 값은 최대값을 찾기 전에 숫자로 변환하려고 시도하며 문자열을 명시적으로 숫자로 변환할 필요가 없습니다.

(단 NaN으로 나오지 않을 경우 가능). ref

 

 

다른 사람 코드2

function solution(s) {
  // 최솟값 추출
  let min = Math.min.apply(null, s.split(' ').map(Number));
  // 최댓값 추출
  let max = Math.max.apply(null, s.split(' ').map(Number));
  var answer = min + ' ' + max;
  return answer;
}
Logic
띄여쓰기 단위로 구분을 만들어서
인자의 타입을 숫자로 바꾼 뒤
가장 낮은 숫자와 가장 높은 숫자를 추출후
결과값에 맞게 출력
정확성 테스트
테스트 1 통과 (0.07ms, 30MB)
테스트 2 통과 (0.13ms, 29.7MB)
테스트 3 통과 (0.06ms, 29.7MB)
테스트 4 통과 (0.06ms, 30MB)
테스트 5 통과 (0.20ms, 30.3MB)
테스트 6 통과 (0.09ms, 29.9MB)
테스트 7 통과 (0.05ms, 30MB)
테스트 8 통과 (0.07ms, 29.8MB)
테스트 9 통과 (0.06ms, 29.6MB)
테스트 10 통과 (0.10ms, 30MB)
테스트 11 통과 (0.06ms, 29.9MB)
테스트 12 통과 (0.07ms, 29.8MB)

이런식으로 사용시 배열인자의 최댓값 출력가능. (ref)

Math.max.apply(null, numArray);

 

 

map을 통해 type을 숫자로 바꾸는 방법 (ref)

 - parseInt는 사용할 수 없음(인자를 하나만 받을수 있기 때문)

['1', '2', '3'].map(Number); // [1, 2, 3]

 

 

++refernce

https://programmers.co.kr/learn/courses/30/lessons/12939

https://stackoverflow.com/questions/30503788/is-it-safe-to-use-javascripts-math-max-on-an-array-of-strings

https://developer.mozilla.org/ko/docs/Web/JavaScript/Reference/Global_Objects/Math/max#getting_the_maximum_element_of_an_array

https://developer.mozilla.org/ko/docs/Web/JavaScript/Reference/Global_Objects/Array/map#example_tricky_use_case