문서 검색

문제

언어

  • JavaScript

순서도

  1. 문서의 맨 앞에서부터 한 글자씩 기준으로 해서, 어떤 단어와 동일한 단어가 있는지 검사
  2. 동일한 단어를 찾았으면, 동일한 단어의 위치 이후부터 한 글자씩 기준으로 잡아서 동일한 단어가 있는지 검사
  3. 문서의 끝까지 도달했을 때, 동일한 단어의 총 개수를 출력

문제 풀이 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));