😎풀이

  1. source를 기준으로 각 라인 순회
    1-1. ignore block (/* */)내부인지에 따라 로직 구분
    1-2. 블록 내부 문자인 경우, 블록 종료 문자가 탐색될 때까지 유효 문자로 취급하지 않음
    1-3. 블록 내부 문자가 아닌 경우, 라인 무시 혹은 블록 열기 문자가 아니라면 유효 문자로 추가
  2. 각 라인이 종료될 때 블록 무시 상태가 아니고 유효한 문자를 보유한 상태일 경우 정답 배열에 추가
  3. 유효한 문자를 담은 배열 반환
function removeComments(source: string[]): string[] {
    const comments = []
    let isInBlock = false
    let curLine = ''
    for(const line of source) {
        const n = line.length
        for(let i = 0; i < n; i++) {
            if(isInBlock) {
                if(line[i] === '*' && i + 1 < n && line[i + 1] === '/') {
                    isInBlock = false
                    i++
                }
            } else {
                if(line[i] === '/' && i + 1 < n && line[i + 1] === '/') break
                if(line[i] === '/' && i + 1 < n && line[i + 1] === '*') {
                    isInBlock = true
                    i++
                } else {
                    curLine += line[i]
                }
            }
        }
        if(isInBlock === false && curLine.length > 0) {
            comments.push(curLine)
            curLine = ''
        }
    }
    return comments
};
profile
내 지식을 공유할 수 있는 대담함

0개의 댓글