Network disconnected
Description
당신에게 자연수로 이루어진 길이가 n
인 배열 b
가 주어집니다. 초기에는 모든 수들이 "안티 세포" 안에 들어있습니다. 일반적인 세포는 분열을 하지만, 이 안티 세포는 반대로 여러 안티 세포가 모여 합성을 합니다. 당신은 다음과 같은 과정을 통해 인접한 두 안티 세포를 합치거나 또는 그대로 두려고 합니다.
i=0
로 설정하고, 빈 배열c
를 하나 만듭니다.i
가n
이라면 과정을 종료합니다.b[i]
를 포함하는 안티 세포를X
, 그리고X
바로 왼쪽에 있는 안티 세포를 Y라고 정의합니다. 만약Y
가 존재하고X
의 모든 숫자의 합과Y
의 모든 숫자의 합이 같다면, 당신은 이 두 안티 세포를 합치거나 합치지 않는 행동 중에서 하나를 선택할 수 있습니다.- 만약
X
와Y
를 합친다면, 둘을 합치고,c
의 맨 뒤에i
를 추가한 뒤 다시 3번 과정으로 돌아갑니다. - 만약
X
와Y
를 합치지 않는다면(또는Y
가 존재하지 않는다면),i
를 1 증가시키고 2번 과정으로 돌아갑니다.
- 만약
예를 들어, 다음은 b = [1,1,1,1]
일 때 위와 같은 과정을 거치는 것을 나타낸 것입니다.
i | 안티 세포 | c | 비고 |
---|---|---|---|
0 | (1)(1)(1)(1) |
[] |
초기 상태입니다. |
1 | (1)(1)(1)(1) |
[] |
i=0 일 때는 Y 가 존재하지 않으므로 i 를 1 증가시켰습니다. |
1 | (1,1)(1)(1) |
[1] |
b[1] 을 포함하는 안티 세포(X )와 그 왼쪽의 안티 세포(Y )를 합쳤습니다. 따라서 c 에 i=1 이 추가됩니다. |
2 | (1,1)(1)(1) |
[1] |
b[1] 을 포함하는 안티 세포(X ) 왼쪽의 안티 세포 Y 가 존재하지 않으므로 i 를 1 증가시켰습니다. |
3 | (1,1)(1)(1) |
[1] |
X 의 모든 수의 합은 1이고, Y 의 모든 수의 합은 2이므로, 둘은 합칠 수 없습니다. 따라서 i 을 1 증가시켰습니다. |
3 | (1,1)(1,1) |
[1,3] |
b[3] 을 포함하는 안티 세포(X )와 그 왼쪽의 안티 세포(Y )를 합쳤습니다. 따라서 c 에 i=3 이 추가됩니다. |
4 | (1,1)(1,1) |
[1,3] |
b[3] 을 포함하는 안티 세포(X )와 그 왼쪽의 안티 세포(Y )를 합칠 수 있었지만 그러지 않았습니다. 따라서 i 를 1 증가시켰습니다. |
이 경우 c = [1,3]
이 됩니다. 물론 이는 c
를 만들 수 있는 하나의 경우일 뿐이며, 당신의 선택에 따라 []
, [1]
, [3]
, [1,3]
, [2]
, [1,3,3]
으로 c
배열을 다양하게 만들 수 있습니다. 당신이 어떤 선택을 하더라도 유한한 횟수 안에 c
배열을 만들 수 있음은 증명될 수 있습니다.
당신은 b
가 주어졌을 때 만들 수 있는 서로 다른 배열 c
의 개수가 몇 개인지 알고 싶습니다.
정수로 이루어진 배열 a
와 s
가 매개변수로 주어집니다. a
는 여러 개의 b
배열을 순서대로 이어 붙인 배열이며, s
는 각 b
배열의 길이가 순서대로 담긴 배열입니다. 각 b
배열에 대해 문제의 답을 109 + 7로 나눈 나머지를 구하여 배열에 차례대로 담아 return 하도록 solution 함수를 완성해주세요.
예를 들어, a = [1,2,3,4,5,6,7,8,9]
, s = [2,3,4]
라면, 다음 3가지 b
배열에 대해서 답을 구해야 합니다.
b = [1,2]
(s[0] = 2
이므로,a
의 첫 2개 원소가b
배열을 이룹니다.)b = [3,4,5]
(s[1] = 3
이므로,a
의 그다음 3개 원소가b
배열을 이룹니다.)b = [6,7,8,9]
(s[2] = 4
이므로,a
의 그다음 4개 원소가b
배열을 이룹니다.)
제한사항
- 1 ≤
a
의 길이 ≤ 200,000- 1 ≤
a
의 모든 수 ≤ 109
- 1 ≤
- 1 ≤
s
의 길이 ≤a
의 길이- 1 ≤
s
의 모든 수 ≤a
의 길이 s
의 모든 수의 합 =a
의 길이
- 1 ≤
입출력 예
a | s | result |
---|---|---|
[1,1,1,1,1,1,2,5,8,2,1,1,4,8,8,8,12,6,6] |
[4,3,1,5,6] |
[6,3,1,5,9] |
입출력 예 설명
입출력 예 #1
- 다음 5개의
b
배열에 대한 답을 구해야 합니다.
b |
답 |
---|---|
[1,1,1,1] |
6 |
[1,1,2] |
3 |
[5] |
1 |
[8,2,1,1,4] |
5 |
[8,8,8,12,6,6] |
9 |
- 따라서,
[6,3,1,5,9]
를 return 해야 합니다.
Result
Stop
Result of [Run Test] or [Submit] will be displayed here
내가 제출한 코드가 왜 틀렸는지 프로그래머스 AI에게 물어보세요.
제출 후 채점하기를 눌러 30점 이상인 경우 물어볼 수 있어요.
베타 기간 동안에는 한 문제당 1번만 물어볼 수 있어요.
베타 기간 동안에는 한 문제당 1번만 물어볼 수 있어요.