Dev.log

TIL: JavaScript 축약코딩 기법_단락평가

Soozinyy 2023. 6. 15. 16:27

intro

프로그래머스 연습문제를 풀던 중 다른사람의 풀이를 통해 '단락 평가 기법'을 새로 알게 되어 가져와 보았다.

 

🔗 문제 링크

https://school.programmers.co.kr/learn/courses/30/lessons/120812

 

 

 

풀이

다른사람의 풀이

function solution(array) {
    let m = new Map();
    for (let n of array) m.set(n, (m.get(n) || 0) + 1);
    m = [...m].sort((a,b) => b[1]-a[1]);
    return m.length === 1 || m[0][1] > m[1][1] ? m[0][0] : -1;
}

 

📍 문제의 코드

m.set(n, (m.get(n) || 0) + 1)

삼항연산자는 많이 봤지만 이런 방식의 코드는 생소했다. || (or) 가 쓰인 걸 봐서는 조건문과 비슷한데 말이다.

 

이 코드의 의미는 아래 참고 문서에서 확인할 수 있었다.

그밖의 JavaScript 축약코딩 기법에 대해 자세히 소개되어 있으니 참고하면 좋다.

 

 

🔗 참고 문서

https://www.sitepoint.com/shorthand-javascript-techniques/

 

 

✔️ 풀이 해석

따라서 문제의 코드는 단락 평가에 의해 이렇게 해석될 수 있다.

if(m.get(n))	{
	m.get(n) = m.get(n) + 1;
}else {
    m.get(n) = 0 + 1;
}

array가 [1, 2, 3, 3, 3, 4] 라면 for of 문에 의해 n은 순서대로 1, 2, 3, 3, 3, 4이고

조건문 m.get(n)는 값이 null || undifined || '' 가 아니라면(=값이 존재한다면) true, 값이 null || undifined || ''라면 false를 return한다.

 

처음에 배열의 첫번째 값 '1'이 들어오면,

m.get(1), 즉, m.1는 undefined 이다.

m.1가 undefined이므로 조건문의 결과는 false를 return.

m에 1 key를 추가하고, value 값을 0+1, 즉, 1을 세팅한다.

 

배열의 두번째 값 '2'가 들어와도 마찬가지로 false.

m에 2 key를 추가하고, value 1을 세팅한다.

 

배열의 세번째 값 '3'이 들어와도 마찬가지로 false.

m에 3 key 추가하고, value 1을 세팅다.

 

배열의 네번째 값 '3'이 들어오면,

이번에는 m.3value 값이 1로 세팅되어 있으므로 true,

m.3의 값을 m.3 + 1, 즉, 1+1, 2로 세팅다.

 

이런 방법으로 배열의 모든 원소를 대상으로 반복다.

 

Map을 console에 출력해보면 다음과 같다.

Map(4) { 1 => 1, 2 => 1, 3 => 3, 4 => 1 }