-
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.3의 value 값이 1로 세팅되어 있으므로 true,
m.3의 값을 m.3 + 1, 즉, 1+1, 2로 세팅한다.
이런 방법으로 배열의 모든 원소를 대상으로 반복한다.
Map을 console에 출력해보면 다음과 같다.
Map(4) { 1 => 1, 2 => 1, 3 => 3, 4 => 1 }
'Dev.log' 카테고리의 다른 글
TIL: 또다시 2개의 배열 (0) 2023.06.17 TIL: 2개의 배열 (0) 2023.06.16 TIL: Synchronous call back과 Asynchronous call back (0) 2023.06.14 TIL: Git error:failed to push some refs to (0) 2023.06.13 TIL: 일어나 코딩해야지 (1) 2023.06.05 댓글