[알고리즘] 2차원 탐색 - 큰 수 출력하기

큰 수 출력하기

N(1<=N<=100)개의 정수를 입력받아, 자신의 바로 앞 수보다 큰 수만 출력하는 프로그램을 작성하세요.(첫 번째 수는 무조건 출력한다)


▣ 입력설명
첫 줄에 자연수 N이 주어지고, 그 다음 줄에 N개의 정수가 입력된다.
▣ 출력설명
자신의 바로 앞 수보다 큰 수만 한 줄로 출력한다.
▣ 입력예제 1
6
7 3 9 5 6 12
▣ 출력예제 1
7 9 6 12


요소를 차례차례 탐색하여 조건에 맞는 요소를 정답 배열에 넣으면 된다.

내 풀이

function solution(arr) {
        let answer = [];
        answer.push(arr[0]);
        for (let i = 1; i < arr.length; i++) {
          arr[i] < arr[i + 1] ? answer.push(arr[i + 1]) : null;
        }
        return answer;
}

강사님 풀이

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

다른 풀이

function solution(arr){
    let answer = [];
    arr = [0, ...arr];
 
    for (let i=1; i < arr.length; i++){
        if (arr[i] > arr[i-1]){
            answer.push(arr[i])
        }
    }
    return answer.join(' ');
}

push 를 사용하지 않고 스프레드 문법을 사용하였다.

function solution(arr) {
  let answer = [];
  arr.reduce((acc, cur) => {
    if (cur > acc) {
      answer.push(cur);
    }
    return cur;
  }, 0);
 
  return answer.join(' ');
}

reduce 메서드를 사용하였다. for문 을 사용하지 않는게 내 목표였는데 이 방법이 떠오르지 않았다. 사실 되게 간단한거였는데... reduce 함수의 인자로 넘겨줄 acc,cur 에서 acc 를 이전 단계의 cur 로 return해주면 바로 이전 index 와 비교하게 된다. 이때 초기값으로는 0을 넘겨준다.

좋은 웹페이지 즐겨찾기