문제 (1번)
- 신입생과 재학생이 일렬로 서 있다.
- 이중에 일부 학생을 선정해서 그룹을 만들려고 한다.
- 그룹에 속한 학생들은 모두 좌, 우로 인접해서 서 있어야 한다. 즉 그룹에 속한 학생들 사이에 그룹에 속하지 않은 학생이 서 있으면 안된다.
- 그룹에는 재학생이 정확히 K명 포함되어야 한다.
- 그룹에 포함되는 신입생의 수는 제한이 없다. 신입생이 포함되지 않아도 된다.
제한 사항
-
단 그룹은 한 개만 만들어야 한다.
-
0은 신입생, 1은 재학생을 의미한다.
-
학생의 길이는 1 <= <= 100 이다.
-
그룹을 하나도 만들지 못하는 경우에는 0을 반환한다.
아이디어
-
우선 1의 개수를 세어서 K보다 작으면 0을 반환한다.
-
1이 있는 인덱스를 모두 찾는다.
-
첫 번째 1이 있는 인덱스부터 K 만큼 지난 1이 있는 인덱스를 찾는다.
-
인덱스 양끝으로 부터 0을 포함하고 있는 리스트를 구한다. 리스트에서 순서를 지키면서 양끝에 0을 포함할 수 있는 조합의 개수를 더한다.
-
이를 인덱스 리스트가 끝날때까지 구현한다.
코드
from typing import List
def solution(student: List[int], k: int) -> int:
old_student__idx = []
for idx in range(len(student)):
if student[idx] == 1:
old_student__idx.append(idx)
if len(old_student__idx) < k:
return 0
if __name__ == '__main__':
student = [0, 1, 0, 0, 1]
print(solution(student, 1))
문제 (2번)
제한 사항
-
검색 기능을 가진 사이트를 운영하고 있다. 매월 초마다 전원을 최고의 이슈 검색어를 조사하고 있다.
-
조사하는 방법은 아래와 같다.
- 전월의 사용자들의 검색 기록을 일 기준으로 나눈
research가 주어진다.research를 기준으로 어떤 검색어가 몇 번 검색되었는지를 정리한다.- 어떤 검색어가 연속된
n일 동안 최소k번 이상 검색되고, 같은 연속된n일 동안 총 2 xnxk번 이상 검색되었을 경우 이슈 검색어가 된다.
- 이슈 검색어 중에서 가장 여러 번 이슈 검색어가 최고의 이슈 검색어가 된다.
- 가장 여러 번 이슈 검색어가 된 검색어가 여러 개인 경우 사전 순으로 빠른 검색어가 최고의 이슈 검색어가 된다.
아이디어
research배열을 해시 테이블 형태로 만든다. 그리고 K 이상인 값을 뽑는다.