> 웹 프론트엔드 > JS 튜토리얼 > TIL: LIFO 솔루션 및 정규 표현 기법【CodeWars】

TIL: LIFO 솔루션 및 정규 표현 기법【CodeWars】

Susan Sarandon
풀어 주다: 2024-12-20 07:52:10
원래의
865명이 탐색했습니다.

TIL: LIFO Solution and Regular Exprresion Techniques【CodeWars】

개요?

방향 감소 챌린지는 방향 배열에서 최단 경로를 찾는 것입니다.

예:

Input
-> Output
["NORTH", "SOUTH", "SOUTH", "EAST", "WEST", "NORTH", "WEST"]
-> ["WEST"]
/* 
Because moving "NORTH" and "SOUTH", or "EAST" and "WEST", is unnecessary.
*/

/* 
Case: omit the first "NORTH"-"SOUTH" pair 
["NORTH", "SOUTH", "SOUTH", "EAST", "WEST", "NORTH", "WEST"]
-> ["SOUTH", "EAST", "WEST", "NORTH", "WEST"]

Case: omit the "EAST"-"WEST" pair 
-> ["SOUTH", "NORTH", "WEST"]

Case: omit the "NORTH"-"SOUTH" pair 
-> ["WEST"]
*/

// this case cannot be reduced:
["NORTH", "WEST", "SOUTH", "EAST"]
-> ["NORTH", "WEST", "SOUTH", "EAST"]

로그인 후 복사

솔루션 1: LIFO

function dirReduc(plan) {
  var opposite = {
    'NORTH': 'SOUTH', 'EAST': 'WEST', 'SOUTH': 'NORTH', 'WEST': 'EAST'};
  return plan.reduce(function(dirs, dir){
      if (dirs[dirs.length - 1] === opposite[dir])
        dirs.pop(); // Remove last direction if it's the opposite
      else
        dirs.push(dir); // Otherwise, add current direction to the stack
      return dirs;
    }, []);
}
로그인 후 복사

Reduce를 사용하여 구현된 LIFO(후입선출) 접근 방식입니다.

단계:

  1. 빈 스택 선언(dirs)
  2. 입력 배열(plan)의 각 방향에 대해 스택의 마지막 요소(dirs)가 현재 방향과 반대인지 확인
  3. 반대라면 스택에서 마지막 요소를 팝하고 현재 방향을 건너뜁니다. 그렇지 않으면 현재 방향을 스택에 푸시합니다.
  4. 모든 지침이 처리될 때까지 이 과정을 반복합니다.

솔루션 2: 정규식

function dirReduce(arr) {
  let str = arr.join(''), pattern = /NORTHSOUTH|EASTWEST|SOUTHNORTH|WESTEAST/;
  while (pattern.test(str)) str = str.replace(pattern,''); // Remove pairs while they exist
  return str.match(/(NORTH|SOUTH|EAST|WEST)/g)||[];
}
로그인 후 복사

대체 버전:

function dirReduc(arr) {
  const pattern = /NORTHSOUTH|EASTWEST|SOUTHNORTH|WESTEAST/;
  let str = arr.join('');

  while (pattern.test(str)) {
    str = str.replace(pattern, ''); // Remove pairs while they exist
  }

  const result = str.match(/(NORTH|SOUTH|EAST|WEST)/g);
  return result || [];
}
로그인 후 복사

단계:

  1. 정규식을 사용하여 조작할 수 있도록 입력 배열(arr)을 단일 문자열로 결합합니다.
  2. 반대 방향 쌍과 일치하는 정규식(패턴) 정의 (예: '북남부', '동서부').
  3. 정규식에서 찾은 모든 방향 쌍을 제거하려면 루프에서 바꾸기 메서드를 사용하세요.
  4. 모든 쌍을 제거한 후 match 메서드를 사용하여 문자열에서 나머지 방향을 추출하고 배열로 반환합니다.

토론 및 통찰력?

이 솔루션의 최소 사례는 다음과 같습니다.

1. ["SOUTH", "EAST", "WEST", "NORTH"]
-> []

2. ["NORTH", "WEST", "SOUTH", "EAST"]
-> ["NORTH", "WEST", "SOUTH", "EAST"]
로그인 후 복사

간결하고 정규식을 영리하게 사용하는 솔루션 2를 선호합니다. 처음에는 정규식으로 해결하는 것을 상상할 수 없었지만 조인, 일치, while, 교체 및 테스트 방법을 사용하여 쌍을 제거하는 것이 인상적입니다.

이러한 솔루션이 궁금하거나 더 많은 과제를 탐색하고 싶다면 여기를 방문하세요.
아래에 댓글을 남겨주세요!

읽어주셔서 감사합니다 ?

위 내용은 TIL: LIFO 솔루션 및 정규 표현 기법【CodeWars】의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:dev.to
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿