알고리즘 문제

데일리 루틴 29번 - 제일 작은 수 제거하기

nbcssw 2024. 8. 20. 11:35

https://school.programmers.co.kr/learn/courses/30/lessons/12935

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

 

슈도코드

 

 

겪은 문제

answer가 비어있을 때 [-1]을 반환하기 위해

if (answer === [])
	answer = [-1]

이렇게 코드를 짰는데, (answer === [])가 항상 false값이 나오는 바람에 제대로 정답이 나오지 않았다.

구글링을 해본 결과, JavaScipt에서는 객체를 비교할 때, 내용을 보는 것이 아니라 메모리에서 동일한 객체를 가리키는 것인지 확인한다. 때문에 JavaScript에서 객체로 선언된 것들끼리 비교되었을 때, 절대로 동등할 수 없다.

console.log([] === []); // false

let a = ['abc'];
let b = ['abc'];

console.log(a === b); // false

b = a;
console.log(a === b); // true => b가 a와 같은 주소를 가리키기 때문에 true

 

결국, ‘answer가 비어있을 때’를 조건으로 사용하고 싶다면 다음와 같이 코드를 짜야 했다.

if (!answer[0]) // answer가 비어있다면 answer[0]의 값은 항상 false기 때문에 !answer[0]은 true

// 또는

if (answer.length === 0)

 

나의 답

function solution(arr) {
    var answer = [];
    let min = arr[0];
    
    for(let i=0; i<arr.length; i++){
        if (arr[i] < min)
            min = arr[i];
    }
    
    for(let i=0; i<arr.length; i++){
        if (arr[i] !== min)
            answer.push(arr[i]);
    }
    
    if(!answer[0])
        answer.push(-1);
    
    return answer;
}