Leet 에서는 문제 설명 외에도 코드 입력기에 주석 처리 되어 있는 힌트를 잘 봐야 한다.
입력되는 head가 이미 연결리스트로 만들어져 있어서 val와 next를 가지고 있다.
nums 배열 안의 요소(숫자)들과 연결리스트인 head의 val는 중복 없는 unique 한 값
// 코드 입력기에 있는 주석
Definition for singly-linked list.
function ListNode(val, next) {
this.val = (val===undefined ? 0 : val)
this.next = (next===undefined ? null : next)
}
@param {ListNode} head
@param {number[]} nums
@return {number}
head에서부터 시작해서 next로 갈 때 next.val이 nums 배열안에도 있으면 → 연결되어 있는 상태이다.
없으면 → 연결이 끊어진 상태이다.
쭉 연결된 노드들이 하나의 컴포넌츠이므로,
연결이 끊어져있다가 nums 배열에서 .val과 일치하는 새로운 노드를 만났을 때 count 를 1개씩 늘려준다.
var numComponents = function(head, nums) {
let node = head
let index = -1
let componentCount = 0
let sequentialCondition = false
while(node){
index = nums.indexOf(node.val)
if(index >=0){ // nums 배열안에 node.val 가 없으면 -1, 있으면 0이상의 인덱스 번호
if(!sequentialCondition){ // 연결이 끊어진 상태였다가 새로운 노드를 만난 것이므로 새 컴포넌츠 발견! count 1 증가
componentCount++
sequentialCondition = true
}
}else{ // nums 배열안에 없으면 연결 끊어진 상태로 변경
sequentialCondition = false
}
node= node.next
}
return componentCount
};