저수 칸의 물 나누기
문제
가로와 세로가 각각 N칸인 격자 모양으로 물칸이 붙어 있는 저수 시설이 있다. 각 물칸에는 지금 담겨 있는 물의 양이 자연수로 적혀 있다. 가로나 세로로 맞닿은 두 물칸 사이에는 칸막이가 있으며, 칸막이를 열면 두 칸의 물이 서로 섞인다.
관리인은 다음의 작업을 한 차례씩 되풀이한다.
1) 가로나 세로로 맞닿은 두 물칸을 모두 살펴, 담긴 물의 양의 차이가 L 이상 R 이하인 자리의 칸막이를 연다.
2) 열린 칸막이를 따라 서로 이어진 물칸들을 하나의 묶음으로 본다. 어느 칸막이도 열리지 않아 혼자 남은 물칸도 하나의 묶음이다.
3) 묶음마다 그 묶음에 속한 물칸의 물을 모두 합친 뒤 묶음에 속한 물칸의 수로 나눠, 각 물칸에 그 값만큼 다시 담는다. 나누어 떨어지지 않으면 소수점 아래는 버린다.
4) 칸막이를 모두 닫는다.
1번에서 물의 양을 견주는 기준은 그 차례가 시작될 때의 양이다. 한 차례 안에서 먼저 섞인 물의 양이 다른 칸막이를 여는 판단에 끼어들지는 않는다. 물칸이 둘 이상 들어 있는 묶음이 하나도 없으면 더 이상 물이 옮겨 가지 않으므로 작업을 멈춘다.
결과적으로 처음의 물의 양이 주어졌을 때, 물이 옮겨 간 차례가 모두 몇 번인지 구하는 프로그램을 작성하여라.
예를 들어 N=2이고 L=20, R=50이며 처음의 물의 양이 다음의 표와 같다고 해보자.
| 44 | 78 |
|---|---|
| 12 | 23 |
첫 차례에는 44와 78의 차이가 34, 44와 12의 차이가 32라서 왼쪽 위 칸을 둘러싼 두 자리의 칸막이가 열린다. 12와 23의 차이는 11이라 L=20에 미치지 못하고, 78과 23의 차이는 55라서 R=50을 넘으므로 그 두 자리는 열리지 않는다. 열린 칸막이로 이어진 44, 78, 12가 한 묶음이 되어 합 134를 3으로 나눈 44씩을 담고, 23은 혼자 남는다.
| 44 | 44 |
|---|---|
| 44 | 23 |
두 번째 차례에는 23이 담긴 칸이 위쪽의 44와 차이 21, 왼쪽의 44와 차이 21이어서 양쪽 칸막이가 모두 열린다. 나머지 자리는 차이가 0이라 열리지 않는다. 열린 칸막이로 이어진 세 칸의 합 111을 3으로 나눈 37씩을 담고, 왼쪽 위의 44는 혼자 남는다.
| 44 | 37 |
|---|---|
| 37 | 37 |
세 번째 차례에는 맞닿은 두 칸의 차이가 7이거나 0뿐이어서 L=20에 미치지 못하고, 칸막이가 하나도 열리지 않는다. 따라서 물이 옮겨 간 차례는 두 번이고 이 경우 정답은 2이다.
입출력 예시
예시 1
입력
2 20 50 44 78 12 23
출력
2
예시 2
입력
2 20 50 50 30 20 40
출력
1
예시 3
입력
1 1 1 2
출력
0
입력 조건
가장 먼저 저수 시설의 한 변에 놓인 물칸의 수 N과 칸막이를 여는 기준이 되는 두 값 L, R이 공백으로 구분되어 한 줄에 주어진다. N은 50보다 작거나 같은 자연수이며, L과 R은 각각 1 이상 100 이하의 자연수로 L은 R보다 작거나 같다.
이어서 N개의 줄에 걸쳐 각 줄에 놓인 물칸의 물의 양이 위에서 아래로 차례대로 주어진다. 한 줄에는 N개의 값이 왼쪽부터 공백으로 구분되어 주어지며, 각 값은 1 이상 100 이하의 자연수다.
출력 조건
물이 옮겨 간 차례가 모두 몇 번인지 한 줄에 출력한다. 물칸이 둘 이상 들어 있는 묶음이 하나라도 만들어진 차례만 센다. 처음부터 열리는 칸막이가 없다면 0을 출력한다. 수 하나만 출력하므로 줄 끝에 남기는 공백은 없다.
요구사항
- 칸막이는 가로나 세로로 맞닿은 두 물칸 사이에만 있습니다. 대각선으로는 맞닿지 않습니다
- 칸막이를 여는 판단은 그 차례가 시작될 때의 물의 양으로 합니다. 같은 차례 안에서 먼저 섞인 결과가 판단에 끼어들지 않습니다
- 한 묶음의 물은 합을 칸 수로 나눈 값으로 모두 같아지며, 나누어 떨어지지 않으면 소수점 아래를 버립니다
- 물칸이 둘 이상 들어 있는 묶음이 하나라도 생긴 차례를 한 번으로 셉니다
- L이 1 이상이므로 물의 양이 같은 두 칸 사이의 칸막이는 열리지 않습니다. 따라서 작업은 반드시 끝납니다
- 표준 입력으로 읽고 표준 출력으로 내보내는 프로그램을 짜야 합니다
- 쓸 수 있는 말은 파이썬, 자바스크립트입니다
- 메모리 제한은 256MB입니다. 브라우저에서는 재지 않고 적기만 합니다
- 시간 제한은 출제자의 정답 코드를 같은 런타임에서 재서 정합니다
- 이 문제는 프롬프트가 아니라 코드를 냅니다. 그 코드는 이 기기의 브라우저에서 돌고, 서버로는 나온 출력의 지문과 걸린 시간만 갑니다. 맞았는지는 서버가 정합니다. 실행 시간은 각자 기기가 적어 보내는 값이라, 코드와 기기 정보를 순위표에 같이 내걸어 둡니다.
- 출력이 글자 하나까지 기대값과 같아야 합니다. 줄 안의 빈칸은 다른 글자와 똑같이 봅니다.
- 케이스는 16개이고, 그 가운데 3개는 입력과 기대 출력을 함께 보여 줍니다. 나머지는 제출할 때만 쓰이고 화면에는 보여 주지 않습니다.
- 케이스 16개를 전부 통과해야 해결입니다.
예시
공개 케이스 3개입니다. 채점에는 숨은 케이스가 함께 쓰입니다. 케이스 16개를 전부 통과해야 해결입니다.
1 1 1 2
0
2 20 50 44 78 12 23
2
2 20 50 50 30 20 40
1
풀이
코드는 이 기기에서돕니다. 서버로는 나온 출력의 지문과 걸린 시간만 갑니다. 맞았는지는 서버가 정합니다.
제출은 로그인 하셔야 됩니다. 공개 케이스로 돌려보는 것은 로그인 없이도 됩니다.
공개 케이스 3개로 돌려보기가 됩니다. 제출하면 숨은 케이스까지 돕니다.
이 문제를 푼 사람
아직 없습니다. 첫 번째가 되실 수 있습니다.