ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 2531. [Python]회전 초밥
    Python_알고리즘/Silver I 2024. 6. 30. 15:26

    1. 문제

     

    https://www.acmicpc.net/problem/2531

     

    2. 접근 방법

     

    • 시간 제한: 1초
    • 메모리 제한: 256MB
    • 브루트포스
    • 슬라이딩 윈도우

     

    3. 파이썬 코드

     

    # 많은 인풋 처리
    import sys
    
    input = sys.stdin.readline
    
    N, d, k, c = map(int,input().split())
    # 초밥 저장할 리스트
    select_list = []
    
    for _ in range(N):
        select_list.append(int(input()))
    # 리스트를 k 만큼 확장
    for i in range(k-1):
        select_list.append(select_list[i])
    # 최대 길이 측정
    max_value = 0
    # N 까지 반복
    for i in range(N):
        # set으로 중복되는 초밥 개수 제거
        sushi_list = set(select_list[i:i+k])
        # 쿠폰이 초밥 리스트 안에 있는 경우 길이 + 1
        if c not in sushi_list:
            count = len(sushi_list) + 1
        # 없으면 길이 count 에 저장
        else:
            count = len(sushi_list)
        # 최대 값이랑 count 비교
        if max_value < count:
            max_value = count
    
    print(max_value)

     

    4. 문제를 풀고난 후 생각

     

    • 초밥 리스트를 만들고 N까지 반복문을 진행하지만 k 의 길이만큼 리스트를 확정해둔 상태로 반복문을 동작한다.
    • 반복문을 돌면서 set으로 중복되는 초밥 개수를 제거해주면 현재 리스트에는 초밥 종류의 개수가 남기 때문에 그 길이를 측정해준다.
    • 남은 리스트에서 쿠폰이 존재하는지 체크를 하여 길이를 +1 해준 값을 저장한다.
    • max_value 와 count를 비교하여 더 큰 값을 갱신해준다.

     

    5. 문제를 푸는데 도움이 되는 지식

     

    • 브루트포스
    • 슬라이딩 윈도우

    'Python_알고리즘 > Silver I' 카테고리의 다른 글

    1105. [Python]팔  (0) 2024.06.20
    11052. [Python]카드 구매하기  (0) 2024.05.20
    1932. [Python]정수 삼각형  (0) 2024.04.22
    1141. [Python] 접두사  (0) 2024.04.09
    11279. [Python]최대 힙  (0) 2024.01.09

    댓글

Designed by Tistory.