Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |
Tags
- 쿠링
- 코드포스
- Gradle
- architecture
- Compose
- TEST
- android
- Kotlin
- livedata
- GitHub
- MiTweet
- 암호학
- textfield
- MyVoca
- Coroutine
- boj
- Coroutines
- 프로그래머스
- Hilt
- androidStudio
- pandas
- Python
- Codeforces
- 코루틴
- AWS
- Rxjava
- activity
- 백준
- relay
- ProGuard
Archives
- Today
- Total
이동식 저장소
2560. 짚신벌레 본문
2560번: 짚신벌레
첫째 줄에 a, b, d, N을 나타내는 네 정수가 빈칸 하나를 사이에 두고 차례로 주어진다. 단, 0<a<b<d≤10,000이고, 1≤N≤1,000,000이다.
www.acmicpc.net
규칙에 따라 변하는 짚신벌레의 상태를 추적하는 문제이다. 딱 봐도 dp스럽지 않은가? 짚신벌레의 상태는 날짜에 의해서만 변하므로,
다음을 정의한다.
상태
: 태어남 (태어났지만 성체는 아님)j=0 : 성체가 됨 (번식 중)j=1 : 번식을 중단함j=2
j=1
문제에서 짚신벌레는 성체가 되자마자 번식한다고 했다. 따라서
번째 날에 성체가 되는 짚신벌레는i 일 전에 태어난 짚신벌레이다. 따라서i−a 이다.t[i][1]=t[i−a][0] 번째 날에 성체인 짚신벌레의 수는i 번째 날에 성체였던 짚신벌레의 수에서 번식을 중단한 짚신벌레의 수를 빼고, 새로 성체가 된 짚신벌레의 수를 더하면 된다.i−1 번째에 번식을 중단하는 짚신벌레는i 일 전에 태어난 짚신벌레이다. 따라서b 이다.sum[i][1]=sum[i−1][1]−t[i−b][0]+t[i][1]
j=0
번째 날에 태어난 짚신벌레의 수는i 번째 날에 성체인 짚신벌레의 수와 같다. 따라서i 이다.t[i][0]=sum[i][1] 번째 날의 어린(아직 번식하지 못하는) 짚신벌레의 수는i 번째 날의 어린 짚신벌레의 수에서 성체가 된 짚신벌레의 수를 빼고, 새로 태어난 수를 더하면 된다.i−1 번째 날에 성체가 되는 짚신벌레는i 일 전에 태어난 짚신벌레이다. 따라서a 이다.sum[i][0]=sum[i−1][0]−t[i−a][0]+t[i][0]
j=2
번째 날에 처음 번식을 중단하는 짚신벌레는i 번째 날에 태어난 짚신벌레이다. 따라서i−b 이다.t[i][2]=t[i−b][0] 번째 날에 번식을 중단하고 있는 짚신벌레는i 번째 날에 번식을 중단하고 있던 짚신벌레의 수에서i−1 번째 날에 죽은 짚신벌레의 수를 빼고,i 번째 날에 처음 번식을 중단한 짚신벌레의 수를 더하면 된다.i 번째 날에 죽는 짚신벌레는i 일에 태어난 짚신벌레이다. 따라서i−d 이다.sum[i][2]=sum[i−1][2]−t[i−d][0]+t[i][2]
주의
나머지 연산에 주의하자. 나머지를 취하기 전에 1000을 더해야 한다. 나머지와 실제 값의 대소관계는 다를 수 있기 때문이다.

간만에 글 쓰기 좋은 문제를 풀었다.
'Problem Solving > BOJ' 카테고리의 다른 글
2696. 중앙값 구하기 (0) | 2021.05.24 |
---|---|
15824. 너 봄에는 캡사이신이 맛있단다 (0) | 2021.04.23 |
16637. 괄호 추가하기 (0) | 2021.04.17 |
20040. 사이클 게임 (0) | 2021.04.03 |
16562. 친구비 (0) | 2021.03.27 |