일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 9급경제학
- 파생금융
- 개발자
- 채권기초
- 케이스메소드
- 경제학
- 금융기초
- 배열메소드
- 7급경제학
- 자바스크립트
- 문과 개발
- 주식과채권
- 경제학적개념
- 콜드콜
- 바닐라자바스크립트
- 비전공자개발자
- 경제학기초
- 국내수출
- 경제학적기초지식
- 하버드MBA
- 경제학적설명
- 코딩
- 파생경제학
- 개발자되기
- 주식기초
- devlift
- 비전공자 코딩
- 파생상품
- case method
- 비전공자 개발
- Today
- Total
deVSner
[edabit] Fix the Code: Un-Mutating an Array - 문제 해결 과정 및 배운 점(구조분해 할당) 본문
[edabit] Fix the Code: Un-Mutating an Array - 문제 해결 과정 및 배운 점(구조분해 할당)
RudeofSun 2020. 4. 5. 09:27
스코프에 대한 개념은 있습니다.
하지만, 스코프에 해당하는 문제풀이가 부족하다고 생각했습니다.
edabit을 통해서, 이러한 갈증을 조금은 해결할 수 있었는데요
그 첫 문제로 Fix the Code : Un-Mutating an Array 문제를 풀어보았습니다.
난이도는 medium이라고 책정되어있지만, 배열 메소드를 접해보셨다면 그렇게 어려운 문제는 아닙니다.
우선 문제 상황을 보시죠.
let x = [3, 3, 3, 3, 3, 3, 3]
// Each time x is called, the following results are shown:
change(x, 0) // [3, 3, 3, 3, 3, 3, 3]
change(x, 1) // [3, 2, 2, 2, 2, 2, 3]
change(x, 2) // [3, 2, 1, 1, 1, 2, 3]
change(x, 3) // [3, 2, 1, 0, 1, 2, 3]
위와 같이 x 변수에 배열이 할당되어 있습니다.
그 아래에는 change라는 함수를 통해 x와 숫자 0, 1, 2, 3을 매개변수로 받고 있습니다.
전 여기까지만 보고 immutable 하게 change 함수를 작성하라는 문제인 줄 알았습니다만(그러면 난이도가 더 올라갔겠죠?ㅋㅋㅋ)
아래와 같이 change 함수를 줬습니다. 이걸 보고 mutable 한 change 함수를 immutable 하게 바꾸란 말이죠.
function change(x, times) {
for(let i = 0; i < x.length; i++) {
let j = 1;
while (j <= times) {
if (i >= j && i < x.length-j) {
x[i]--;
}
j++;
}
}
return x;
}
언뜻 보기에 코드가 잘 이해가 가지 않습니다.
제가 사용했던 방법은,
크롬 개발자 도구에서 debugger를 돌려서 숫자들이 어떻게 증감되는지 파악하는 것이 첫번째였습니다.
사실 첫번쨰를 하고 나니까 어떻게 문제를 풀어야 할지 감이 왔습니다.
스코프 문제라고는 하지만 mutable 과 immutable의 차이를 알고 있는지 물어보는 거 같았습니다.
'그냥 x를 복제하면?'
이라는 생각이 먼저 머리를 스쳤고, slice 메소드를 통해 매개변수로 받은 x를 맨 먼저 복제해주었습니다.
function change(x, times) {
var test = x.slice();
for (let i = 0; i < test.length; i++) {
let j = 1;
while (j <= times) {
if (i >= j && i < test.length - j) {
test[i]--;
}
j++;
}
}
return test;
}
위는 정답코드입니다.
test라는 변수에 x의 전체를 slice하여서 할당해 주었습니다. 그렇게 되면 test를 통해 값을 수정하는 셈이 되니, x는 변하지 않습니다.
이번 문제를 통해 배운 것은
'구조 분해 할당'입니다.
다른 사람들의 풀이를 보니, 구조분해할당 방법을 사용해서 복제를 했더라구요.
저는 해당 개념에 대한 이해가 부족하기 때문에 mdn을 살펴보았습니다. 이 부분은 러닝로그에 작성을 했고 링크를 하단에 걸어두겠습니다.
https://devsner.tistory.com/44
구조 분해 할당이란? (7가지의 예제에 대한 코드와 설명 첨부)
edabit에서 스코프 문제를 풀다가 구조분해 할당 개념을 접했습니다. https://devsner.tistory.com/43 [edabit] Fix the Code: Un-Mutating an Array - 문제 해결 과정 및 배운 점(구조분해 할당) 스코프에 대한..
devsner.tistory.com
'자료구조 및 알고리즘' 카테고리의 다른 글
합병정렬 (0) | 2020.07.14 |
---|---|
RomanNumeralTranslator 알고리즘 풀이 (feat. 순서도) (0) | 2020.05.06 |
(작성 중) 재귀함수를 사용할 때, 값이 중복으로 들어가는 경우? (0) | 2020.04.11 |
재귀 함수 사용 시에 간과했던 실행 순서 (0) | 2020.04.02 |
edabit - Find the Index (Part 2), return 미기입으로 인한 오류 (0) | 2020.04.02 |