[알고리즘] 기초 문제 풀이 - 최솟값 구하기

최솟값 구하기

7개의 수가 주어지면 그 숫자 중 가장 작은 수를 출력하는 프로그램을 작성하세요.


▣ 입력설명
첫 번째 줄에 7개의 수가 주어진다.
▣ 출력설명
첫 번째 줄에 가장 작은 값을 출력한다.
▣ 입력예제 1
5 3 7 11 2 15 17
▣ 출력예제 1
2


7개의 숫자 중 최솟값을 구하는 문제이다. 일단 숫자가 7개나 되니까 효율적인 방법이 무엇일까라는 생각이 먼저 떠오른다. for문으로 쭉 돌려가면서 최솟값을 찾는게 가장 먼저 생각나지만 효율적으로 보이진 않는다. 주어진 배열을 오름차순으로 정렬하면 편하지 않을까라는 생각이 들었고, 배열 고차 함수중 sort메서드를 사용해야겠다는 생각이 들었다.

하지만 단순히 sort메서드를 사용하면 정렬이 생각하는대로 잘되지 않는다. 그 이유는 sort메서드의 기본정렬 순서는 유니코드 코드 포인트의 순서를 따르기 때문이다. 배열의 요소가 숫자 타입이라 할지라도 배열의 요소를 일시적으로 문자열로 변환한 후 유니코드 코드 포인트의 순서를 기준으로 정렬한다.

예를 들어 let arr = [5, 7, 1, 3, 2, 9, 11]sort메서드를 통해 정렬하여도 그에 대한 정렬값으로 [1, 11, 2, 3, 5, 7, 9]이 나온다.

이를 해결하기 위한 방법으로 sort메서드에 정렬 순서를 정의하는 비교 함수를 인수로 전달해주면 된다.

내 풀이

function solution(arr){         
  let min = 0;
  arr.sort((a,b) => a - b);
  min = arr[0]
  return min;
}

강사님 풀이

function solution(arr){         
  let answer, min=Number.MAX_SAFE_INTEGER;
  for(let i=1; i<arr.length; i++){
    if(arr[i]<min) min=arr[i];
  }
  answer=min;
  return answer;
}

위는 for문을 도는 기초적인 풀이법.

function solution(arr) {
  let answer = Math.min(...arr);
  return answer;
}

이건 Math내장 함수를 이용한 풀이법

좋은 웹페이지 즐겨찾기