[자바스크립트] 연결리스트 문제 - Leet 817 Linked List Components

iberis2·2023년 6월 15일
0

알고리즘 문제

목록 보기
24/27
post-thumbnail

🔗 Leet 817. Linked List Components

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
};

추가 문제 모음

🔗 백준 Linked List 문제들
🔗 프로그래머스 표 편집

profile
React, Next.js, TypeScript 로 개발 중인 프론트엔드 개발자

0개의 댓글