
😎풀이
source를 기준으로 각 라인 순회
1-1. ignore block (/* */)내부인지에 따라 로직 구분
1-2. 블록 내부 문자인 경우, 블록 종료 문자가 탐색될 때까지 유효 문자로 취급하지 않음
1-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
};