JS & REACT

알고리즘 풀이 중 오랜만에 경험한 기초 지식

KANG_G1 2024. 5. 12. 23:08

Leetcode - 2696. Minimum String Length After Removing Substrings
문제를 풀 때 경험했던 문제입니다.

당시 저는 문자열에 특정 키워드가 존재하는지에 대한 조건을
변수에 할당해 사용하려 했는데, 계속 반복문에서 타임아웃이 발생했습니다.
아무리 생각해봐도 문제가 변수 할당밖에 없어 변수에 할당한 조건문을 while문에 직접 추가했더니
그제서야 동작하는 것을 확인했는데요.
 이런 일이 발생하는걸까? 하자마자 바로 잘못을 깨달았습니다.


문제 발생 코드

var minLength = function(s) {
  // const hasAB = s.includes('AB');
  // const hasCD = s.includes('CD');
    
    while(s.includes('AB') || s.includes('CD')) {
        if(s.includes('AB')) {
            s = s.replace('AB', '');
        }
        if(s.includes('CD')) {
            s = s.replace('CD', '');
        }
    }
    return s.length;
};

변수 hasAB와 hasAB는 해당 시점의 값으로 고정되기 때문에 발생하던 문제였습니다.

이는 자바스크립트의 스코프와 연관이 있는데요.
변수의 값이 실행 컨텍스트 내에서 초기화된 , 해당 스코프 내에서 변경되지 않는  고정되어집니다.

위의 코드를 보면 hasAB와 hasCD 변수가 반복문의 외부 스코프에 존재하는데요,
반복문 내에서 조건이 동적으로 변경시키려 했다면 조건을 직접 반복문 내에 작성하여
현재 실행 컨텍스트 시점을 반영하도록 해줘야 합니다.

가장 기본인 자바스크립트의 개념을 잊었는데, 다신 이런 일이 발생하지 않도록
집중해서 문제에 접근해야겠습니다,,