BOJ[1543] - 문서 검색 by JavaScript
문서 검색
문제
언어
- JavaScript
순서도
- 문서의 맨 앞에서부터 한 글자씩 기준으로 해서, 어떤 단어와 동일한 단어가 있는지 검사
- 동일한 단어를 찾았으면, 동일한 단어의 위치 이후부터 한 글자씩 기준으로 잡아서 동일한 단어가 있는지 검사
- 문서의 끝까지 도달했을 때, 동일한 단어의 총 개수를 출력
문제 풀이 step 1
- 세준이를 도와서 어떤 문서에서 어떤 단어가 총 몇 번 등장하는지 세는 함수를 만드는 문제입니다.
- 단, 어떤 단어를 셀 때, 중복되어 세는 것은 빼고 세야 합니다.
- 예를 들어, 어떤 문서가 “abababa” 이고 어떤 단어가 “aba” 일 때,
- 중복되어 세는 것을 포함해서 세면 3 개이고, 중복되어 세는 것을 제외하고 세면 2 개입니다.
- 우선, 어떤 문서의 한 글자씩 기준으로 해서, 어떤 단어와 동일한 단어가 있는지 검사합니다.
- 동일한 단어가 없다면, 다음 글자를 기준으로 잡아서 검사합니다.
- 동일한 단어가 있다면, 동일한 단어만큼 건너 뛴 다음에 그 다음 글자를 기준으로 잡아서 검사합니다.
- 위의 과정들을 반복하며 어떤 문서의 끝까지 도달했을 때, 동일한 단어의 총 개수를 출력하면 정답입니다.
- 추가 설명은 주석으로 작성하겠습니다.
소스 코드
const input = require("fs")
.readFileSync("/dev/stdin")
.toString()
.trim()
.split("\n");
const solution = (input) => {
const document = input[0].split("");
const str = input[1].split("");
let cnt = 0;
// 어떤 문서의 한 글자씩 검사
for (let i = 0; i < document.length; i++) {
// 기준으로 하는 글자로부터 어떤 단어의 길이만큼 글자가 남아있지 않다면 break
if (i + str.length > document.length) break;
let isExist = true;
for (let j = i, k = 0; j < i + str.length; j++, k++) {
// 어떤 문서의 글자와 어떤 단어의 글자가 동일하다면 continue
if (document[j] === str[k]) continue;
// 어떤 문서의 글자와 어떤 단어의 글자가 다르다면 break
isExist = false;
break;
}
// 만약 어떤 문서에서 어떤 단어와 동일한 단어가 있다면,
// 개수를 세어주고, 기준으로 하는 글자를 어떤 단어의 길이만큼 증가시키기
if (isExist) {
cnt += 1;
i += str.length - 1;
}
}
return cnt;
};
console.log(solution(input));