프로그래머스 문제풀이 5

zitto·2023년 4월 1일
0

Algorithms

목록 보기
5/22
post-thumbnail

1.제일 작은 수 제거하기

문제 설명
정수를 저장한 배열, arr 에서 가장 작은 수를 제거한 배열을 리턴하는 함수, solution을 완성해주세요. 단, 리턴하려는 배열이 빈 배열인 경우엔 배열에 -1을 채워 리턴하세요. 예를들어 arr이 [4,3,2,1]인 경우는 [4,3,2]를 리턴 하고, [10]면 [-1]을 리턴 합니다.

제한 조건
arr은 길이 1 이상인 배열입니다.
인덱스 i, j에 대해 i ≠ j이면 arr[i] ≠ arr[j] 입니다.


입출력 예
arr return
[4,3,2,1][4,3,2]
[10][-1]

[문제풀이]

function solution(arr) {
    const answer=[];
	//1. 제일 작은 수 찾기
   let minimum = arr[0] //제일 작은 값을 저장하는 변수
   for(let i=1; i< arr.length; i++){
       if(arr[i] < minimum)
      //현재 저장되어 있는 제일 작은 값보다 더 작은 값이 있는 경우
	 // 더 작은 값을 갱신(=재할당)
           minimum = arr[i]
       // console.log(i,arr[i],minimum)
   }
    //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;
        //리팩토링
        //return answer.length === 0 ? [-1] : answer;
         !return answer.length ? [-1] : answer;
    }
}


접근방법
1.제일 작은 값을 뽑아오기
2.배열의 맨 앞에 있는 숫자를 담아본다.
3.배열 전체를 순회해서 숫자 하나씩 꺼내본다.
4.for문 사용하기
5.각 원소들을 해당값으로 가져올 수 있게 된다.
6.현재 저장되어 있는 제일 작은 값보다 더 작은 값이 있는 경우 더 작은 값을 갱신(=재할당)
미니멈보다 작다면 기존의 숫자보다 작은 데이터가 있다는 뜻
7.리팩토링
서로 같은 값을 가지고 비교하기 때문에 0번째 인덱스가 기준으로 되어 있으니 0번째 뒤의 1번째 인덱스부터 가져오도록 한다.
for(let i=1;i,arr.length;i++){
8.제일 작은 수를 제거해본다.
9.제일 작은 값을 가져오는 것이니 빈배열을 가져온다.
10. 빈배열인지 체크한다.
answer.length === 0

[메소드이용하기]

Math.min(4, 3 ,2 ,1) 들어온 숫자들 중에 작은 숫자 찾기 // 1
Math.max(4,3,2,1) 제일 큰 숫자 찾기 //4

function solution(arr) {
    // const answer = []; 
    const minimum = Math.min(...arr)
     //console.log(minimum);
    const answer = arr.filter(el =>{
        return el !== minimum
        // console.log(el,minimum) ;
    })
    // console.log(answer);
    return !answer.length ? [-1] ; answer;
}

배열에서 데이터를 제거하는 방법

  • arr.shift 맨앞데이터 제거
  • arr.pop 맨뒤
    원하는 위치의 데이터를 제거 하고 싶다면? splice!



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

문제 설명
자연수 n을 뒤집어 각 자리 숫자를 원소로 가지는 배열 형태로 리턴해주세요. 예를들어 n이 12345이면 [5,4,3,2,1]을 리턴합니다.

제한 조건
n은 10,000,000,000이하인 자연수입니다.


입출력 예
n / return
12345 [5,4,3,2,1]

[문제풀이]

function solution(n) {
    n = String(n);
    const answer = [];
    console.log(n, typeof n, n[0]);
    for(let i = n.length - 1; i >= 0; i--){
        // console.log(i,n[i])
        answer.push(Number(n[i]))
    }
    return answer;
}


접근방법
1. 정답담을 수 있는 빈배열 만들고 콘솔로 인자의 타입 찍어보기
2. 넘버타입은 인덱스값을 가져올 수 없으므로
n을 String으로 바꿔준다.
3. 뒤집은 형태를 가지고 와야 한다면 마지막인덱스가 첫번째로 와야함.
4. 데이터의 마지막 인덱스부터 순서대로 가져와야 한다.
5. for문을 반대로 변경한다.
6. 최초식이 n의 마지막 인덱스부터 시작한다.
7. 문자열을 다시 숫자형으로 바꿔준다.

[메소드이용하기]

split으로 각각의 원소값으로 쪼개준다.

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

0개의 댓글