1551번: 수열의 변화백준/문제2024. 2. 6. 13:32
Table of Contents
문제 출처 : https://www.acmicpc.net/problem/1551
언어 : Kotlin
문제 설명 :
크기가 N인 수열 A가 주어졌을 때, 세준이는 인접한 두 원소의 차이를 이용해서 크기가 N-1인 수열 B를 만들 수 있다.
예를 들어, A = {5, 6, 3, 9, -1} 이었을 때, B = {6-5, 3-6, 9-3, -1-9} = {1, -3, 6, -10}이 된다. 즉, B[i] = A[i+1]-A[i]가 된다.
수열 A가 주어졌을 때, 세준이가 위의 방법을 K번 했을 때 나오는 수열을 구하는 프로그램을 작성하시오.
입력 :
첫째 줄에 수열의 크기 N과 K가 주어진다. N은 20보다 작거나 같은 자연수이고, K는 0보다 크거나 같고, N-1보다 작거나 같은 정수이다. 둘째 줄에는 수열이 ‘,’로 구분되어 주어진다. 수열을 이루고 있는 수는 절댓값이 100보다 작거나 같은 정수이다.
출력 :
첫째 줄에 K번 변형한 수열을 ‘,’로 구분하여 출력한다.
제한 사항 :
- 시간 제한 : 2초
- 메모리 제한 : 128MB
입출력 예 :
입력 | 출력 |
5 1 5,6,3,9,-1 |
1,-3,6,-10 |
5 2 5,6,3,9,-1 |
-4,9,-16 |
5 4 5,6,3,9,-1 |
-38 |
8 3 4,4,4,4,4,4,4,4 |
0,0,0,0,0 |
2 0 -100,100 |
-100,100 |
풀이 :
import java.io.BufferedWriter
import java.io.OutputStreamWriter
fun main() = with(System.`in`.bufferedReader()) {
val bw = BufferedWriter(OutputStreamWriter(System.out))
val (n, k) = readLine().split(" ").map { it.toInt() }
val a = readLine().split(",").map { it.toInt() }
var b = mutableListOf<Int>()
repeat(k) {
if (it == 0) {
for (i in 0 until a.lastIndex) {
b += a[i + 1] - a[i]
}
} else {
val temp = mutableListOf<Int>()
for (i in 0 until b.lastIndex) {
temp += b[i + 1] - b[i]
}
b = temp
}
}
bw.write(if (k == 0) a.joinToString(",") else b.joinToString(","))
bw.flush()
bw.close()
}
'백준 > 문제' 카테고리의 다른 글
2804번: 크로스워드 만들기 (1) | 2024.02.08 |
---|---|
2002번: 추월 (1) | 2024.02.07 |
10769번: 행복한지 슬픈지 (0) | 2024.02.05 |
11944번: NN (1) | 2024.02.05 |
15000번: CAPS (1) | 2024.02.05 |
@스몰스테핑 :: 작은 발걸음
포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!