프로그래머스/Level2(JS)

[프로그래머스] 최댓값과 최솟값 - JS

KimBY 2023. 5. 4. 19:15
728x90
반응형

최댓값과 최솟값

❓ 문제설명

문자열 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"

💡 풀이

function solution(s) {
  // 내풀이
  // 입력값을 모두 돌면서 최솟값과 최댓값을 각각 확인해서 정리한 후 결과 반환
  return s.split(' ').reduce((acc, n, idx) => {
    const num = parseInt(n)

    if (idx === 0) {
      acc.push(num)
      acc.push(num)
    } else {
      if (acc[0] > num) acc[0] = num
      if (acc[1] < num) acc[1] = num
    }
    return acc
  }, []).join(' ')
  
  /*================================================================*/

  // 다른 사람 풀이 확인
  // 정렬만 진행한 후 리턴 시 정렬된 값으로 최솟값과 최댓값을 반환
  const nums = s.split(' ').sort((a, b) => parseInt(a) - parseInt(b))

  return nums[0] + ' ' + nums[nums.length - 1]
}

📝 해설

문자열 s를 공백을 기준으로 분리한 배열(split 사용)을 reduce로 돌면서 최솟값과 최댓값을 각각 확인하여 return 하였다. 이 후 다른사람들의 풀이를 보니 정렬 후 최솟값과 최댓값을 return 하는 것을 알게 되었다.

 

두 방식 split 처리한 배열을 모두 확인하여 처리하기 때문에 처리시간이 비슷하였으며 메모리 측면에서도 비슷한 것으로 보인다.

📚 참고자료

- https://kimby.tistory.com/84 (String 메소드)

- https://kimby.tistory.com/48 (Array 메소드)

728x90
반응형