꽃밭 가꾸기
문제
행과 열의 크기가 각각 N인 2차원 배열 형태의 꽃밭이 존재한다. 초기에 각 위치에는 꽃이 존재할 수도 있으며, 존재하지 않을 수도 있다. 각 꽃은 자신만의 꽃 수용량을 가진다. 또한, 처음에 각 위치의 꽃이 머금고 있는 물의 양은 모두 0이다. 한 위치에는 하나의 꽃만 존재할 수 있다.
이때, 꽃밭을 가꾸는 관리자는 다음의 두 가지 연산을 사용할 수 있다.
1. 물 주기 연산
물 주기 연산은 행과 열의 크기가 각각 N인 2차원 배열이 함께 주어진다. 각 위치의 자연수 형태의 값은 해당 위치에 들어갈 물의 양을 의미한다. 꽃이 있는 위치라면, 해당 꽃에 물이 들어간다. 그 결과 꽃이 머금고 있는 물의 양이 꽃의 수용량보다 크다면, 해당 위치의 꽃은 즉시 죽어 사라진다. 이때 꽃에 들어가지 못한 남은 물의 양은 증발하여 사라지게 된다. 반면에 꽃이 없는 위치에 물이 주어진 경우, 물은 해당 위치에 저장된다.
2. 꽃 만들기 연산
현재 꽃이 없는 위치에 한해서, 물이 10 이상 존재한다면 해당 위치에 새롭게 꽃을 생성한다. 생성되는 꽃의 수용량은 (물의 양 / 2)이다. 이때, 소수점 아래는 버린다. 또한 새롭게 생성되는 꽃은 0만큼의 물을 머금고 있도록 초기화된다.
결과적으로 초기 꽃의 상태와, 총 K번의 연산이 주어졌을 때, 연산을 모두 수행한 뒤에 행과 열의 크기가 각각 N인 꽃밭의 각 위치에 꽃이 존재하는지 혹은 존재하지 않는지 출력하는 프로그램을 작성하여라. 꽃이 존재하는 곳은 1, 그렇지 않은 곳은 0을 출력한다.
예를 들어 N=5일 때, 다음과 같이 꽃밭의 상태가 주어졌다고 가정하자.
| 0 | 2 | 0 | 3 | 5 |
|---|---|---|---|---|
| 0 | 0 | 0 | 0 | 0 |
| 7 | 3 | 5 | 3 | 3 |
| 9 | 9 | 0 | 0 | 0 |
| 0 | 0 | 0 | 0 | 0 |
또한 연산의 총 개수가 K=3인 상태에서 먼저 물 주기 연산을 수행한다고 가정하자. 이때 주어진 행과 열의 크기가 각각 N인 2차원 배열이 다음과 같다고 가정하자.
| 11 | 3 | 5 | 1 | 4 |
|---|---|---|---|---|
| 1 | 12 | 7 | 5 | 6 |
| 9 | 10 | 21 | 2 | 0 |
| 1 | 7 | 5 | 8 | 35 |
| 6 | 7 | 9 | 10 | 15 |
결과적으로 꽃밭의 상태는 다음과 같다. 꽃이 존재하는 위치는 셀에 음영을 칠하여, (현재 물의 양 / 꽃의 수용량) 형태로 나타냈다. 반면에 꽃이 존재하지 않는 위치는 셀에 음영 없이 (현재 물의 양)만 나타냈다.
| 11 | 0 | 5 | 1 / 3 | 4 / 5 |
|---|---|---|---|---|
| 1 | 12 | 7 | 5 | 6 |
| 0 | 0 | 0 | 2 / 3 | 0 / 3 |
| 1 / 9 | 7 / 9 | 5 | 8 | 35 |
| 6 | 7 | 9 | 10 | 15 |
이후에 꽃 만들기 연산을 수행하면, 결과적으로 꽃밭의 상태는 다음과 같다.
| 0 / 5 | 0 | 5 | 1 / 3 | 4 / 5 |
|---|---|---|---|---|
| 1 | 0 / 6 | 7 | 5 | 6 |
| 0 | 0 | 0 | 2 / 3 | 0 / 3 |
| 1 / 9 | 7 / 9 | 5 | 8 | 0 / 17 |
| 6 | 7 | 9 | 0 / 5 | 0 / 7 |
이후에 다시 물 주기 연산을 수행한다고 가정하자. 이때 주어진 행과 열의 크기가 각각 N인 2차원 배열이 다음과 같다고 가정하자.
| 7 | 1 | 2 | 6 | 4 |
|---|---|---|---|---|
| 3 | 4 | 10 | 7 | 3 |
| 4 | 5 | 7 | 7 | 7 |
| 1 | 8 | 5 | 9 | 3 |
| 8 | 3 | 12 | 7 | 5 |
결과적으로 꽃밭의 상태는 다음과 같다.
| 0 | 1 | 7 | 0 | 0 |
|---|---|---|---|---|
| 4 | 4 / 6 | 17 | 12 | 9 |
| 4 | 5 | 7 | 0 | 0 |
| 2 / 9 | 0 | 10 | 17 | 3 / 17 |
| 14 | 10 | 21 | 0 | 5 / 7 |
입출력 예시
예시 1
입력
5, 3, [[0, 2, 0, 3, 5], [0, 0, 0, 0, 0], [7, 3, 5, 3, 3], [9, 9, 0, 0, 0], [0, 0, 0, 0, 0]], [[1], [11, 3, 5, 1, 4], [1, 12, 7, 5, 6], [9, 10, 21, 2, 0], [1, 7, 5, 8, 35], [6, 7, 9, 10, 15], [2], [1], [7, 1, 2, 6, 4], [3, 4, 10, 7, 3], [4, 5, 7, 7, 7], [1, 8, 5, 9, 3], [8, 3, 12, 7, 5]]
출력
[[0, 0, 0, 0, 0], [0, 1, 0, 0, 0], [0, 0, 0, 0, 0], [1, 0, 0, 0, 1], [0, 0, 0, 0, 1]]
예시 2
입력
3, 1, [[1, 1, 1], [1, 1, 1], [1, 1, 1]], [[1], [2, 0, 2], [0, 0, 0], [2, 0, 2]]
출력
[[0, 1, 0], [1, 1, 1], [0, 1, 0]]
입력 조건
가장 먼저 꽃밭의 크기 N과 연산의 개수 K가 주어진다. N은 100보다 작거나 같은 자연수이며, K는 500보다 작거나 같은 자연수이다.
이어서 행과 열의 크기가 각각 N인 2차원 배열 형태의 초기 꽃밭 정보 배열 flowers가 주어진다. 이때 각 위치의 값은 꽃마다의 물 수용량을 의미한다. 꽃이 없는 곳의 경우 값이 0으로 주어진다. 0이 아닌 위치는 꽃이 있다는 의미이며, 각 꽃의 물 수용량을 의미한다. 초기 꽃 수용량은 각 위치당 최대 100의 자연수이다.
이어서 K개의 연산에 대한 정보가 담긴 배열 operations가 주어진다. 먼저 원소가 하나인 1차원 배열 형태로 연산의 번호가 주어지며, 물 주기 연산은 1, 꽃 만들기 연산은 2로 주어진다. 물 주기 연산이 주어지는 경우에는 N개의 행 정보가 1차원 배열 형태로 연달아 주어진다. 물 주기 연산에서 주어지는 물의 양은 각 위치당 최대 100의 자연수 혹은 0이다.
출력 조건
행과 열의 크기가 각각 N인 2차원 배열 형태로, 꽃밭의 각 위치에 꽃이 존재하는지 혹은 존재하지 않는지 반환하는 프로그램을 작성하여라. 꽃이 존재하는 곳은 1, 그렇지 않은 곳은 0의 값을 갖도록 한다.
요구사항
- solution(N, K, flowers, operations) 함수를 만들고 답을 반환해야 합니다
- 쓸 수 있는 말은 파이썬, 자바스크립트입니다
- 메모리 제한은 256MB입니다. 브라우저에서는 재지 않고 적기만 합니다
- 시간 제한은 출제자의 정답 코드를 같은 런타임에서 재서 정합니다
- 이 문제는 프롬프트가 아니라 코드를 냅니다. 그 코드는 이 기기의 브라우저에서 돌고, 서버로는 나온 출력의 지문과 걸린 시간만 갑니다. 맞았는지는 서버가 정합니다. 실행 시간은 각자 기기가 적어 보내는 값이라, 코드와 기기 정보를 순위표에 같이 내걸어 둡니다.
- 출력이 글자 하나까지 기대값과 같아야 합니다. 줄 안의 빈칸은 다른 글자와 똑같이 봅니다.
- 케이스는 18개이고, 그 가운데 2개는 입력과 기대 출력을 함께 보여 줍니다. 나머지는 제출할 때만 쓰이고 화면에는 보여 주지 않습니다.
- 케이스 18개를 전부 통과해야 해결입니다.
예시
공개 케이스 2개입니다. 채점에는 숨은 케이스가 함께 쓰입니다. 케이스 18개를 전부 통과해야 해결입니다.
5, 3, [[0, 2, 0, 3, 5], [0, 0, 0, 0, 0], [7, 3, 5, 3, 3], [9, 9, 0, 0, 0], [0, 0, 0, 0, 0]], [[1], [11, 3, 5, 1, 4], [1, 12, 7, 5, 6], [9, 10, 21, 2, 0], [1, 7, 5, 8, 35], [6, 7, 9, 10, 15], [2], [1], [7, 1, 2, 6, 4], [3, 4, 10, 7, 3], [4, 5, 7, 7, 7], [1, 8, 5, 9, 3], [8, 3, 12, 7, 5]]
[[0, 0, 0, 0, 0], [0, 1, 0, 0, 0], [0, 0, 0, 0, 0], [1, 0, 0, 0, 1], [0, 0, 0, 0, 1]]
3, 1, [[1, 1, 1], [1, 1, 1], [1, 1, 1]], [[1], [2, 0, 2], [0, 0, 0], [2, 0, 2]]
[[0, 1, 0], [1, 1, 1], [0, 1, 0]]
참고 사항
풀이에 도움이 되는 배경입니다. 지켜야 하는 규격은 위의 입출력 조건과 요구사항에 있습니다.
원본에서 모의고사 1회 2번입니다.
풀이
코드는 이 기기에서돕니다. 서버로는 나온 출력의 지문과 걸린 시간만 갑니다. 맞았는지는 서버가 정합니다.
제출은 로그인 하셔야 됩니다. 공개 케이스로 돌려보는 것은 로그인 없이도 됩니다.
공개 케이스 2개로 돌려보기가 됩니다. 제출하면 숨은 케이스까지 돕니다.
이 문제를 푼 사람
아직 없습니다. 첫 번째가 되실 수 있습니다.