🗃️javascript/코테 프레임 문제

2-1 큰 수 출력하기(24년 △)[map()에서의 continue, break ]

하얀성 2023. 9. 14. 14:27

<문제>

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

 

▣ 입력설명 첫 줄에 자연수 N이 주어지고, 그 다음 줄에 N개의 정수가 입력된다.

▣ 출력설명 자신의 바로 앞 수보다 큰 수만 한 줄로 출력한다.

 

▣ 입력예제 1

6 7 3 9 5 6 12

 

▣ 출력예제 1

7 9 6 12

 


<제출답안 : for문 사용>

1
2
3
4
5
6
7
8
9
10
function solution(arr) {
  let answer = [];
  for(let i in arr){
    if( arr[i] < arr[parseInt(i)+1]){
      answer.push(arr[parseInt(i)+1]);
    }
  }
  answer.unshift(arr[0]);
  return answer; 
}
cs

답이 출력되긴 하지만 두가지 문제가 있다.

1. for in은 잘 쓰지 않는다고 한다.(어제 배워서 한번 써보았는데... i를 문자열로 취급하니 undefined로 출력하네;)

2. 처음 초기화 할때 arr[0]를 넣어주는게 훨씬 이득임.

 

<수정답안>

1
2
3
4
5
6
7
8
9
function solution(arr) {
  let answer = [arr[0]];
  for(let i = 0; i < arr.length-1; i++){
    if( arr[i] < arr[i+1]){
      answer.push(arr[i+1]);
    }
  }
  return answer; 
}
cs

 


<보충>

i-1을 사용하는 것이 i+1을 사용하는 것보다 여러 가지 이유로 더 좋습니다:

1.배열 범위: i-1을 사용하면 배열의 범위를 벗어나지 않습니다. i+1을 사용하면 마지막 반복에서 arr[i+1]은 undefined가 되므로 비교가 의미가 없게 됩니다.

2.가독성: i-1을 사용하면 반복문 내에서 현재 요소를 arr[i]로 표현하고, 이전 요소를 arr[i-1]로 표현할 수 있습니다. 이렇게 하면 코드를 읽는 사람이 현재 요소와 이전 요소가 어떤 것인지 쉽게 이해할 수 있습니다.

 

<수정코드>

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

24년 업데이트

 

map, forEach의 continue, break 사용하기

continue문은 return문을 통해서 구현가능.(나머지 아래 코드 실행없이 다음 반복으로)

braak문은 최대한 for of반복문을 사용한다.(안그럼 try-catch문이나 some,every 메소드를 사용 자세한 내용은 아래 참조)

https://gurtn.tistory.com/199

function solution(arr) {
  let answer = [arr[0]];
  let compare;
  arr.forEach((x) => {
    if (x === arr[0]) {
      compare = x;
      return false;
    }
    if (compare < x) {
      answer.push(x);
    }
    compare = x;
  });
  return answer;
}

let arr = [7, 3, 9, 5, 6, 12];
console.log(solution(arr));

 

 

function solution(arr) {
  let answer = [arr[0]];
  let compare;
  arr.forEach((x) => {
    if (x === arr[0]) {
      compare = x;
      return; // 나머지 코드를 실행하지 않고 다음 요소로 넘어감
    }
    if (compare < x) {
      answer.push(x);
    }
    compare = x;
  });
  return answer;
}

let arr = [7, 3, 9, 5, 6, 12];
console.log(solution(arr));

<기본 정답> 보통은 나처럼 하지 않고 index를 통해서 많이 조작한다.

console.log(solution(arr));
function compareWithPrevious(arr) {
  // 첫 번째 요소는 항상 포함하고, 나머지 요소는 이전 요소와 비교하여 큰 경우에만 포함
  return arr.map((current, index) => {
    if (index === 0 || arr[index - 1] < current) {
      return current;
    } else {
      return null;
    }
  }).filter(element => element !== null); // null 제거
}

let arr = [7, 3, 9, 5, 6, 12];
console.log(compareWithPrevious(arr));