JS 코드 관련 질문 올립니다
Closed this issue · 3 comments
jeongshin commented
/**
* 평균이 최소인 Slice의 시작 위치
* @param A
*/
function solution(A) {
const len = A.length
const sum = (a, b) => a + b
let min = Infinity, i = 0, resolve = -1
do {
const arr1 = A.slice(i, i + 2), avg1 = arr1.reduce(sum) / arr1.length
const arr2 = A.slice(i, i + 3), avg2 = arr2.reduce(sum) / arr2.length
let tmp = Math.min(avg1, avg2, min)
if (tmp !== min) ([ resolve, min ] = [ i, tmp ])
i += 1
} while (i < len - 1)
return resolve
}
const testCase = require("./test.json")
testCase.forEach(({ input, output }) => console.log(input.toString(), '\n', solution(...input), output))
@JunilHwang 형이 작성한 코드인데
if (tmp !== min) ([ resolve, min ] = [ i, tmp ])
이 부분이 어떤 코드? 인지 모르겠어서 올립니다.
eyabc commented
let tmp = Math.min(avg1, avg2, min) 에서 새로운 최소 값을 찾아냅니다. 만일 새로운 최소 값이라면
tmp 값은 이전값인 min 과 다를 것이고 최소 값을 만족하는 인덱스와 최소값을 재할당해 줍니다.
jeongshin commented
let tmp = Math.min(avg1, avg2, min) 에서 새로운 최소 값을 찾아냅니다. 만일 새로운 최소 값이라면
tmp 값은 이전값인 min 과 다를 것이고 최소 값을 만족하는 인덱스와 최소값을 재할당해 줍니다.
저런식으로 값이 할당 가능하군요! 감사합니다
JunilHwang commented
혹시 문법적인 것 때문에 궁금한 것이라면..
const [ a, b ] = [ 0, 1 ]
console.log(a) // 0
console.log(b) // 1
let [ c, d ] = [ 33, 44 ]
console.log(c); // 33
console.log(d); // 44
// 이 상태에서 다시 c, d에다 새로운 값을 할당할 때는 괄호를 씌워줘야합니다.
([ c, d ] = [ 100, 200 ]);
console.log(c) // 100
console.log(d) // 200
원래 python에 있던 기능들인데 js에도 생겼달까..
이러한 문법을 구조분해할당(destructuring) 이라고 합니다!
특히 다음과 같은 상황에 굉장히 효과적입니다.
let a = 10, b = 20;
([ a, b ] = [ b, a]);
console.log(a, b)
비슷하게 Object
또한 구조분해할당이 가능합니다
const obj = { a: 10, b: 20, c: 30, d: 40 }
const { a, b } = obj
let { c, d } = obj
console.log(a, b) // 10, 20
console.log(c, d); // 30, 40
// 재 할당
({ c, d } = { c: 100, d: 200 });
console.log(c, d) // 100, 200
알아두면 굉장히 유용한 문법!