로그인가입

저수 칸의 물 나누기

400점케이스 16출제 dongbinna
10월 30일에 올라온 문제입니다.

문제

가로와 세로가 각각 N칸인 격자 모양으로 물칸이 붙어 있는 저수 시설이 있다. 각 물칸에는 지금 담겨 있는 물의 양이 자연수로 적혀 있다. 가로나 세로로 맞닿은 두 물칸 사이에는 칸막이가 있으며, 칸막이를 열면 두 칸의 물이 서로 섞인다.

관리인은 다음의 작업을 한 차례씩 되풀이한다.

1) 가로나 세로로 맞닿은 두 물칸을 모두 살펴, 담긴 물의 양의 차이가 L 이상 R 이하인 자리의 칸막이를 연다.

2) 열린 칸막이를 따라 서로 이어진 물칸들을 하나의 묶음으로 본다. 어느 칸막이도 열리지 않아 혼자 남은 물칸도 하나의 묶음이다.

3) 묶음마다 그 묶음에 속한 물칸의 물을 모두 합친 뒤 묶음에 속한 물칸의 수로 나눠, 각 물칸에 그 값만큼 다시 담는다. 나누어 떨어지지 않으면 소수점 아래는 버린다.

4) 칸막이를 모두 닫는다.

1번에서 물의 양을 견주는 기준은 그 차례가 시작될 때의 양이다. 한 차례 안에서 먼저 섞인 물의 양이 다른 칸막이를 여는 판단에 끼어들지는 않는다. 물칸이 둘 이상 들어 있는 묶음이 하나도 없으면 더 이상 물이 옮겨 가지 않으므로 작업을 멈춘다.

결과적으로 처음의 물의 양이 주어졌을 때, 물이 옮겨 간 차례가 모두 몇 번인지 구하는 프로그램을 작성하여라.

예를 들어 N=2이고 L=20, R=50이며 처음의 물의 양이 다음의 표와 같다고 해보자.

4478
1223

첫 차례에는 44와 78의 차이가 34, 44와 12의 차이가 32라서 왼쪽 위 칸을 둘러싼 두 자리의 칸막이가 열린다. 12와 23의 차이는 11이라 L=20에 미치지 못하고, 78과 23의 차이는 55라서 R=50을 넘으므로 그 두 자리는 열리지 않는다. 열린 칸막이로 이어진 44, 78, 12가 한 묶음이 되어 합 134를 3으로 나눈 44씩을 담고, 23은 혼자 남는다.

4444
4423

두 번째 차례에는 23이 담긴 칸이 위쪽의 44와 차이 21, 왼쪽의 44와 차이 21이어서 양쪽 칸막이가 모두 열린다. 나머지 자리는 차이가 0이라 열리지 않는다. 열린 칸막이로 이어진 세 칸의 합 111을 3으로 나눈 37씩을 담고, 왼쪽 위의 44는 혼자 남는다.

4437
3737

세 번째 차례에는 맞닿은 두 칸의 차이가 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

풀이

코드는 이 기기에서돕니다. 서버로는 나온 출력의 지문과 걸린 시간만 갑니다. 맞았는지는 서버가 정합니다.

0자1줄메모리 256MB (적어만 둡니다)기준 30ms

제출은 로그인 하셔야 됩니다. 공개 케이스로 돌려보는 것은 로그인 없이도 됩니다.

공개 케이스 3개로 돌려보기가 됩니다. 제출하면 숨은 케이스까지 돕니다.

이 문제를 푼 사람

아직 없습니다. 첫 번째가 되실 수 있습니다.