본문 바로가기
알고리즘/Programmers

[TIL] 2023.03.25 Programmers 문제 풀기

by heereal 2023. 3. 26.

Today I Learned

  • Programmers 문제 풀기

 


Programmers 문제 풀기

최댓값 만들기 (2)

나의 풀이

function solution(numbers) {
    let answer = 0;
    for ( i = 0; i < numbers.length; i++ ) {
        for ( j = 0; j < numbers.length; j++ ) {
            if ( i !== j && numbers[i] * numbers[j] >= answer ) {
                answer = numbers[i] * numbers[j]
            }
        }
    }
    return answer;
}

처음에 answer에 0을 할당하고 시작했더니 원소 두 개를 곱했을 때의 최댓값이 0 이하인 경우의 테스트케이스를 통과하지 못했기 때문에 answer에 0 말고 뭔가 다른 것을 할당해 줄 수 있나 검색을 해봤다.

 

function solution(numbers) {
    let answer = Number.MIN_SAFE_INTEGER;
    for ( i = 0; i < numbers.length; i++ ) {
        for ( j = 0; j < numbers.length; j++ ) {
            if ( i !== j && numbers[i] * numbers[j] >= answer ) {
                answer = numbers[i] * numbers[j]
            }
        }
    }
    return answer;
}

검색해 보니 변수의 초기값을 할당할 때 최소 정수값이라는 게 있길래 이걸 이용해서 풀었다. 근데 내 풀이는 이중 for문으로 너무 비효율적으로 푼 거 같고 다른 사람들 풀이를 보니까 sort 메서드를 많이 쓴 거 같다.

 

 

변수의 초기값을 최대 정수값이나 최소 정수값을 정의하는 방법

  • Number.MAX_SAFE_INTEGER: JavaScript에서 안전한 최대 정수값을 나타내게 된다.
Number.MAX_SAFE_INTEGER
// 9007199254740991 
  • Number.MIN_SAFE_INTEGER: JavaScript에서 안전한 최소 정수값을 나타내게 된다.
Number.MAX_SAFE_INTEGER
// -9007199254740991 

출처 https://velog.io/@ahsy92/최대최소-정수값-설정하기

 

 

다른 사람의 풀이 01

function solution(numbers) {
    numbers.sort((a, b) => a - b);
    return Math.max(numbers[0]*numbers[1], numbers[numbers.length-1]*numbers[numbers.length-2]);
}

numbers 배열을 sort 메서드를 이용해서 정렬한 다음에 Math.max로 최댓값을 찾는다.

 

Math.max를 이용할 때는 0번째 1번째를 곱한 값과 뒤에서 첫 번째, 두 번째 인덱스를 곱한 값 중에서 최댓값을 찾는다. 예를 들면 테스트 1에서 -5 * -3의 값과 2 * 4의 값을 비교해서 둘 중에서 더 큰 값인 15를 최댓값으로 출력하는 것이다.

 

 

다른 사람의 풀이 02

function solution(numbers) {
    var answer = [];
    for(let i = 0; i < numbers.length - 1; i++){
        for(let j = i + 1; j < numbers.length; j++){
            answer.push(numbers[i] * numbers[j]);
        }
    }
    return Math.max(...answer);
}

나는 이중for문을 돌리면서 answer라는 변수와 바로바로 최댓값을 비교했지만 각 원소를 곱한 값을 배열에 push 해서 이 배열 안에 최댓값을 구하는 방법도 있다.

 

 

댓글