일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
- JS localStorage
- JS setInterval
- JS 연산
- JS 스코프
- JS 형변환
- JS null undefined
- JS 데이터타입
- JS appendChild
- git 협업셋팅
- JS 숫자
- JS 함수
- JS value속성
- CSS속성정리
- JS form
- JS append
- JS 화살표함수
- js 변수
- CSS기초
- JS 기초
- JS setTimeout
- JS 삼항연산
- JS typeof연산자
- JS 타이머기능
- JS clearInterval
- JS classList
- JS preventDefault
- HTML기초
- JS form action
- JS redirection
- JS prompt
공부기록용
프로그래머스(LV 0. 배열 조각하기) 본문
LV 0. 배열 조각하기
https://school.programmers.co.kr/learn/courses/30/lessons/181893
문제 설명
정수 배열 arr와 query가 주어집니다. query를 순회하면서 다음 작업을 반복합니다.
- 짝수 인덱스에서는 arr에서 query[i]번 인덱스를 제외하고 배열의 query[i]번 인덱스 뒷부분을 잘라서 버립니다.
- 홀수 인덱스에서는 arr에서 query[i]번 인덱스는 제외하고 배열의 query[i]번 인덱스 앞부분을 잘라서 버립니다.
위 작업을 마친 후 남은 arr의 부분 배열을 return 하는 solution 함수를 완성해 주세요.
입출력 예
- arr = [0, 1, 2, 3, 4, 5]
- query = [4, 1, 2]
- result = [1, 2, 3]
<풀이 시도 과정>
처음에는 splice를 사용하고 싶어서 이렇게 작성해봤었다.
let arr = [0, 1, 2, 3, 4, 5] let query = [4, 1, 2] let result = [] for (let i = 0; i <= query.length; i++) if (i % 2 === 0) { arr1 = arr.splice(query[-i] + 1) } else if (i % 2 !== 0) { result = arr1.splice(query[i + 1]) } console.log(result) return result
문제 이해를 못해서 자꾸 인덱스 배열의 값을 도출해내려고 함,,, 어차피 query[0]의 값은 4로 나오는데ㅋㅋㅋ
🔴그래서 배운거1은
> .at( )은 반환될 값의 인덱스를 받는다. 음수의 인덱스를 전달하면 배열 또는 문자열의 끝에서 계산해서 찾은 요소를 반환 하고 그렇지 않으면 undefined를 반환한다.let a = [4, 1, 2, 5] console.log( a.at(3) % 2) // .at(3) -> 5, 5 % 2 = 1
.at이라는 걸 알게 됬는데 뭐,, 뭐든 알게 됬으니 좋은거라 생각!
🔴 배운거2
> .splice(start: number_시작위치의 인덱스번호, deleteCount: number_지울 갯수, 그자리에 대신 할 요소)
> .slice와의 차이
> splice는 배열의 원본 자체를 건드리고, slice는 배열의 원본은 건드리지 않는다.
> splice는 삭제된 요소를 반환하지만, slice는 빠지고 남는 요소들이 반환된다.let arr = [0, 1, 2, 3, 4, 5] let query = [4, 1, 2] // console.log(arr.splice(0, query[0])) // (0부터 4개제거)제거된 요소를 출력 [ 0, 1, 2, 3 ] // console.log(arr.splice(0, query[1])) // (0부터 1개제거)제거된 요소를 출력[ 0 ] // console.log(arr.splice(query[0])) // (4부터 제거)[ 4, 5 ] // console.log(arr.splice(query[0]+1)) // [ 5 ] // console.log(arr.splice(query[0 + 1])) // [ 1, 2, 3, 4, 5 ]
여기서 내가 헷갈렸던 이유는 splice가 삭제된 요소를 반환하는 것인데 자꾸 삭제된 걸 출력하는 예제로 보다보니 splice자체를 삭제 후 남은걸 반환한다고 생각했었다. 깨달음,,,,굳
splice에 대한 내 잘못된 생각을 고쳐먹고 다시 생각을 해보니!
<해결1>function solution(arr, query) { for (let i = 0; i < query.length; i++) { if (i % 2 === 0 ) { arr.splice(query[i]+1, 1); } else { arr.splice(0, query[i]); } } return arr; } console.log(solution([0, 1, 2, 3, 4, 5], [4, 1, 2]));
이렇게 작성했더니 됬다.
for (let i = 0; i < query.length; i++) { if (i % 2 === 0 ) { arr.splice(query[i]+1, 1); } else { arr.splice(0, query[i]); }
> i=0 -> 0%2도 0,
> arr = [0, 1, 2, 3, 4, 5]에서 arr.splice(query[0] + 1, 1)를 통해 .splice(4 + 1, 1) -> (5, 1) -> 5가 제거
> [0, 1, 2, 3, 4]
> i=1 -> 1%2는 0이 아니므로
> arr.splice(0, query[i]) -> (0, 1) -> 0번째에서 1개 제거니까
> [1, 2, 3, 4]
> i=2 -> 2%2===0
> arr.splice(query[i] + 1, 1) -> (3, 1) -> 3번째에서 1개 제거로 4가 제거
> [1, 2, 3]이 최종이 되는 것!!!!!
🔴배운거 3
> 0인 짝수로 나오면 거짓으로 판단하고, 1인 홀수로 나오면 참으로 판단한다는 것(0,1만 사용)
이때 참고 하는 걸로는 조건식으로 0,1의 값을 활용해 참, 거짓을 이용한다는걸 알게 되었다
그리 삼항연산으로 간단하게 바꿀 수 있을 것 같아서 바꿔봤는데,
> 조건 ? 참(1)일때의 값 : 거짓(0)일때의 값
<해결2>function solution(arr, query) { for (let i = 0; i < query.length; i++) { i % 2 ? arr.splice(0, query[i]) : arr.splice(query[i]+1, 1); } console.log(arr) // [ 1, 2, 3 ] return arr; } console.log(solution([0, 1, 2, 3, 4, 5], [4, 1, 2])); // [ 1, 2, 3 ]
삼항연산으로i % 2 ? arr.splice(0, query[i]) : arr.splice(query[i] + 1);
> 0이 거짓으로 판단되므로 거짓일 때의 출력 식은 ':' 뒤에 작성해주면 된다.
> i % 2 의 값이 0또는 1이 나올것이고
> 참이되는 1이 나오면 arr.splice(0, query[i])
> 거짓이 되는 0이 나오면 arr.splice(query[i]+1, 1)
> 위와 같은 반복이 된다.
function solution(arr, query) {
let temp = []
for (i in query) {
if (i % 2) {
temp = arr.slice(query[i])
arr = [...temp]
} else {
temp = arr.slice(0, query[i] + 1);
arr = [...temp]
}
}
return arr;
}
function solution(arr, query) {
let answer = [...arr];
var f = 0;
var e = 0;
for (let i = 0; i < query.length; i++) {
if (i % 2 === 0) {//짝수
e = f + query[i];
//answer = answer.slice(0,query[i])
} else if (i % 2 === 1) {//홀수
f = f + query[i];
//answer = answer.slice(query[i],answer.length);
}
}
answer = answer.slice(f, e);
return answer.length > 0 ? answer : [-1]
}
'✍️문제풀기✍️ > JS_Programmers school' 카테고리의 다른 글
프로그래머스(LV 1. 가운데 글자 가져오기) (0) | 2023.06.16 |
---|---|
프로그래머스(LV 1. 짝수와 홀수) (0) | 2023.06.16 |
JavaScript 문법 종합(연습06) (0) | 2023.05.31 |
JavaScript 문법 종합(연습05) (2) | 2023.05.30 |
JavaScript 문법 종합(연습04) (1) | 2023.05.29 |