[프로그래머스]Algorithm_23.03.27

윤성해·2023년 3월 27일
0

알고리즘

목록 보기
9/22
post-thumbnail

💡 오늘 배운 것
Math.min / indexOf() / splice() / reverse()

제일 작은 수 제거하기

문제

내생각

// if, else로 배열이 빈 문자열, 그렇지 않을때의 조건문을 만들기
//비어있을 때는 리턴은 -1을 해준다
// 그렇지 않을때는 제일 작은수를 Math.min으로 구하고 그 숫자의 인덱스 값을 빼준다.

내풀이

function solution(arr) {
    const answer = [];
    if(arr.length <= 1){
      return [-1]
    }else {
      arr.splice(arr.indexOf(Math.min(arr)),1)
      // arr에서 제일 작은거 찾아서 인덱스 찾아서, 1개 빼기(라고 생각)
      answer === arr;
    }
  return answer;
}


왜 하나만 맞냐..

레퍼런스

1.

function solution(arr) {
    // 1. 제일 작은 수 찾기
    let minimum = arr[0]; //제일 작은 값을 저장하는 변수
    for (let i = 1; i , arr.length; i++){
        if (arr[i] < minimum){
            //현재 저장되어 있는 제일 작은값보다 더 작은 값이 있는 경우
            // 더 작은 값을 갱신 )=재할당
            minimum = arr[i]
        }
    }
    // 2. 제일 작은 수 제거
    for(let i = 0; i < arr.length; i++){
        if(arr[i] !== minimum){
            answer.push(arr[i])
        } 
    }
    // 3. 빈 배열인지 체크
    if (answer.length === 0){
        answer.push(-1)
    }
    return answer
}

2.

function solution(arr) {
    // 1. 제일 작은 수 찾기
    let minimum = arr[0]; //제일 작은 값을 저장하는 변수
    for (let i = 1; i , arr.length; i++){
        if (arr[i] < minimum){
            //현재 저장되어 있는 제일 작은값보다 더 작은 값이 있는 경우
            // 더 작은 값을 갱신 )=재할당
            minimum = arr[i]
        }
    }
    // 2. 제일 작은 수 제거
    for(let i = 0; i < arr.length; i++){
        if(arr[i] !== minimum){
            answer.push(arr[i])
        } 
    }
    // 3. 빈 배열인지 체크
    
    return answer.length === 0?[-1] : answer;4
}

3. Math.min 메서드 사용하기
배열을 이 메서드에서 사용하면 NaN값이 나온다. 배열이라서!
그래서 배열을 먼저 풀자. (...arr) ➡️ 스프레드 연산자

function solution(arr) {
    // const answer = [];
    //가장 작은수 찾기
    const minimum = Math.min(...arr);
    console.log(minimum)
    
    //작은거 제거
    const answer = arr.filter(el => {
        return el !== minimum;
    })
    //삼항연산자로 빈배열 체크
    return !answer.length ?[-1] : answer
}

splice
1. 원하는 위치 인덱스 값의 데이터를 제거하거나, 추가한다
2. 원본이 변경된다. (주의하기!) slice로 얕은복사를 한번 해준다.
3. 리턴값은 제거된 데이터의 배열
arr. splice (어디서부터자를건지, 몇개제거?, 변경할 값)


위 이미지는 slice로 복사를 했는데, 저 자리에 [...arr]로 배열 복사가 가능하다.


자연수 뒤집어 배열로 만들기

문제

내생각

//출력값을 담아줄 빈 배열을 만들고
//리버스 함수를 이용해서 빈배열에 담아주기

내풀이

function solution(n) {
    const answer = [n].reverse()
} 

하다보니.. 그냥 answer에 바로 reverse 함수 적용시켜서 쓰면 되는거 아닌가? 했음. 틀림

레퍼런스

1. 반복문 반대로 돌리기

function solution(n) {
    n = String(n)
    const answer = [];
    
    for (let i = n.length -1; i >= 0; i --){
        answer.push (Number(n[i]) );
        
    }
    return answer;
    //문자열, 배열에서만 인데스값 사용 가능하다.
} 

2. 배열 메서드 reverse() + map
//숫자 타입의 n을 문자타입을 바꾸자.

function solution(n) {
    return String(n).split("").reverse().map(el => { return Number(el) })
} 


리턴, 중괄호 빼도 가능.

profile
Slow and steady wins the race.

0개의 댓글