2-1 큰 수 출력하기(24년 △)[map()에서의 continue, break ]
<문제>
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]로 표현할 수 있습니다. 이렇게 하면 코드를 읽는 사람이 현재 요소와 이전 요소가 어떤 것인지 쉽게 이해할 수 있습니다.
<수정코드>
24년 업데이트
map, forEach의 continue, break 사용하기
continue문은 return문을 통해서 구현가능.(나머지 아래 코드 실행없이 다음 반복으로)
braak문은 최대한 for of반복문을 사용한다.(안그럼 try-catch문이나 some,every 메소드를 사용 자세한 내용은 아래 참조)
<기본 정답> 보통은 나처럼 하지 않고 index를 통해서 많이 조작한다.