알고리즘 문제 풀이: 파이썬/BOJ

[BOJ_2531] 회전 초밥

hueco 2023. 10. 7.

 

📌 문제 링크: https://www.acmicpc.net/problem/2531

 

2531번: 회전 초밥

첫 번째 줄에는 회전 초밥 벨트에 놓인 접시의 수 N, 초밥의 가짓수 d, 연속해서 먹는 접시의 수 k, 쿠폰 번호 c가 각각 하나의 빈 칸을 사이에 두고 주어진다. 단, 2 ≤ N ≤ 30,000, 2 ≤ d ≤ 3,000, 2 ≤

www.acmicpc.net

 

내 풀이(Success) :

 

🚩 Idea:

 1. 일단 문제에서 N의 수가 최대 30,000으로 꽤 크다. 이때는 입력을 받는 시간을 최대한 줄이기 위해 빠른 입출력을 사용하자. 

 2. 회전하는 벨트를 보고 데큐의 rotate() 함수를 떠올랐다.

 3. 문제에서 구하고자 하는 값은 '최대한 많은 종류의 초밥을 먹고, 그 수를 반환하는 것'이다. 그럼 어떤 경우에 이 값이 최대가 될까? 연속된 k개의 초밥이 모두 다른 종류이고, 그 안에 쿠폰으로 먹을 수 있는 초밥이 들어있지 않는 경우이다. 따라서 나올 수 있는 정답의 최대 값은 k+1이다.

 4. 데큐를 이용해 N의 값만큼 회전시키면서 0번째 인덱스에서 k개의 초밥을 확인한다. 같은 종류의 초밥을 제거하기 위해 집합을 사용한다.

  중요한 포인트는 데큐에서는 list에서 처럼 직접적으로 슬라이싱을 할 수 없다. 따라서 collections 모듈의 islice 함수를 이용하여 데큐에서 일부분을 추출한다.

5. 나머지 과정은 데큐를 회전시키면서 모든 경우를 4번의 과정을 통해 확인하면 된다.

'알고리즘 문제 풀이: 파이썬 > BOJ' 카테고리의 다른 글

[BOJ_12845] 모두의 마블  (0) 2023.10.08
[BOJ_14713] 앵무새  (1) 2023.10.08
[BOJ_1141] 접두사  (0) 2023.10.06
[BOJ_15903] 카드 합체 놀이  (0) 2023.10.06
[BOJ_2841] 외계인의 기타 연주  (0) 2023.10.03

댓글