컴퓨터 과학
면접 대비시간 제한1초메모리 제한128 MB
질의 단어가 문서 자체에 나타난 횟수와 링크를 건 페이지에서 하이퍼링크까지의 단어 거리에 따라 가중한 점수를 합산해 가장 높은 점수의 페이지를 출력한다.
문제
컴퓨터 과학은 컴퓨터와 관련 기술을 이용해 현실의 문제를 푸는 방법을 연구하며, 매우 많은 주제를 아우른다. 최근의 대표적인 성공 사례 중 하나는 정보를 정리하고 검색하는 일이다. 웹 검색이 우리 삶을 얼마나 바꾸어 놓았는지 떠올려 보라. 여기서는 아주 단순한 형태의 웹 검색 엔진을 다룬다.
여러 개의 문서가 주어진다. 각 문서는 단어와 하이퍼링크로 이루어지며(HTML보다 단순한 형식이다), 한 단어짜리 질의도 함께 주어진다. 우리는 각 질의에 대해 가장 관련성이 높은 페이지를 찾아야 한다. 페이지 가 관련 있다고 보는 이유는 두 가지다. (1) 질의어가 안에 등장하거나, (2) 질의어가 로 연결되는 다른 페이지에서 그 하이퍼링크와 가까운 위치에 등장하는 경우다.
점수 계산. 질의어를 라 하자.
- 안에 가 등장할 때마다 는 점을 얻는다.
- 어떤 페이지 에서 로 향하는 하이퍼링크 이 있을 때, 안에서 과의 단어 거리가 인 의 등장마다 는 점을 얻는다. 즉 이면 점을, 그렇지 않으면 점을 얻는다.
하이퍼링크에 표시되는 단어 자체도 문서의 한 단어다. 그 단어가 와 같으면 등장으로 세며, 거리를 잴 때도 자신의 위치를 차지한다. 특히 하이퍼링크 의 표시 단어가 곧 라면 그 등장은 거리 이므로 점의 가치를 지닌다. 거리는 줄바꿈을 무시하고 문서 전체를 하나의 단어열로 보아 단어 단위로 센다. 안의 같은 등장이 를 가리키는 여러 하이퍼링크와 가깝다면, 그만큼 여러 번 중복해서 셀 수 있다.
참고: 사실 (2)번 이유가 더 중요할 때가 많다. 다른 페이지가 당신을 링크하며 당신에 대해 하는 말이, 당신 스스로 하는 말보다 더 나은 설명인 경우가 흔하기 때문이다. 그 이유는 페이지가 스스로에 대한 설명을 스팸처럼 부풀릴 수 있다는 점, 그리고 페이지가 관련된 모든 용어를 담고 있지는 않다는 점이다.
입력
첫 줄에는 데이터 집합의 개수를 뜻하는 정수 이 주어진다. 이어서 개의 데이터 집합이 다음 형식으로 주어진다.
각 데이터 집합의 첫 줄에는 두 정수 과 이 주어진다. 각각 질의의 개수와 웹 페이지의 개수이며, 둘 다 이상 이하다.
다음 개의 줄에는 질의가 한 줄에 하나씩 주어진다. 각 질의는 소문자 알파벳으로만 이루어진 최대 글자의 한 단어다.
그다음에는 개의 웹 페이지에 대한 설명이 주어진다. 번째 페이지의 설명은 그 페이지를 이루는 줄 수 ( 이상 이하)가 적힌 줄로 시작하고, 이어서 각각 최대 글자인 개의 텍스트 줄이 온다. 각 텍스트 줄은 공백으로 구분된 단어들의 나열이다. 모든 단어는 소문자 알파벳으로만 이루어지며 길이는 최대 글자다.
일부 단어는 하이퍼링크다. 하이퍼링크는 표시할 단어와 연결 대상 페이지 번호를 대괄호로 묶어 나타낸다. 예를 들어 [usc,3]은 표시 단어가 usc이고 대상이 번 페이지인 하이퍼링크다. 대상 번호는 항상 이상 이하의 올바른 페이지를 가리키며, 자기 자신으로의 링크는 절대 없다.
출력
각 데이터 집합에 대해, 먼저 Data Set x: 한 줄을 출력한다. 여기서 는 데이터 집합의 번호로 부터 시작한다. 그다음 각 질의에 대해 순서대로, 점수가 가장 높은 페이지를 한 줄에 하나씩 출력한다. 최고 점수를 가진 페이지가 여러 개라면, 페이지 번호가 커지는 순서로 한 줄에 공백으로 구분하여 모두 출력한다.