ํ์ ํฐ๋จ๋ฆฌ๊ธฐ(2346๋ฒ)
Silver 3
#์๋ฃ ๊ตฌ์กฐ #๋ฑ
https://www.acmicpc.net/problem/2346
๋ฌธ์ ๋ด์ฉ
๋ฌธ์ ์ ๊ทผ
์ ๋ ฅ ์์๋๋ก ํ์ ์์ ๋ค์ด์๋ ์ข ์ด์ ์ ํ ์๋ ์ซ์๊ฐ ์ ๋ ฅ์ผ๋ก ์ฃผ์ด์ง๊ณ , ์ข ์ด์ ์ ๋ ฅ๋ ์๋งํผ ์ด๋ํด์ ๋ค๋ฅธ ํ์ ์ ํฐ๋จ๋ ค์ผ ํ๋ค. ์ข ์ด์ ์ซ์๊ฐ ์์๋ฉด ๋ค์ ๋ฒํธ ๋ฐฉํฅ์ผ๋ก ์์ง์ด๊ณ , ์์๋ฉด ์ด์ ๋ฐฉํฅ์ผ๋ก ์์ง์ธ๋ค. ํฐ์ง ํ์ ์ ์ฐ์ธ ์ข ์ด๋ ์ฌ์ฌ์ฉํ์ง ์๋๋ค.
์ ๋ ฅ ์์ 1์ ์๋ก ๋ค์ด ๋ณด๋ฉด
5
3 2 1 -3 -1
1๋ฒ์งธ ํ์ ์ธ ์ข ์ด์ 3์ด ์ ํ ํ์ ์ ํฐ๋จ๋ ธ์ผ๋ฉด, ์์์ด๊ธฐ ๋๋ฌธ์ 4๋ฒ์งธ ํ์ ์ ํฐ๋จ๋ ค์ผ ํ๋ค. 4๋ฒ์งธ ํ์ ์ ์์์ด๊ธฐ ๋๋ฌธ์ ์ผ์ชฝ ๋ฐฉํฅ์ผ๋ก ์ด๋ํ๋ค. 2๊น์ง ์ด๋ํ์ผ๋ฉด 2๋ฒ ์ด๋ํ ๊ฒ์ด๋ค. 2 ์ด์ ์ ๊ฐ์ธ 3์ ์ด๋ฏธ ํฐ์ ธ์ ์ฌ์ฉํ๊ธฐ ๋๋ฌธ์ ์ด ๋๋ -1๋ก ์ด๋ํ๋ค. ํ์ ์ด ์ํ์ผ๋ก ๋์ฌ ์๊ธฐ ๋๋ฌธ์ ์ด์ด์ ธ ์๊ธฐ ๋๋ฌธ์ด๋ค.
์ ๊ณผ์ ์ ๋ฐ๋ณตํด์ ํ์ ์ ํฐ๋จ๋ ค ์ค๋ค.
ํ์ ์ด ์ํ์ผ๋ก ๋์ฌ ์๋ ๊ฒ์ ๋ณด๋ฉด ArrayDeque๋ฅผ ์ฌ์ฉํ๋ฉด ๋ ๊ฒ ๊ฐ๋ค. ๊ทธ๋ฐ๋ฐ ๋ฉ๋ชจ๋ฆฌ ์ ํ์ด 4MB์ด๋ค. ArrayDeque๋ฅผ ์ฌ์ฉํ๋ฉด ๋ฉ๋ชจ๋ฆฌ ์ด๊ณผ๊ฐ ๋ฐ์ํ๋ค(๊ฒฝํ๋ด). ArrayDeque๊ฐ ์ ์๊ฐ ์ด๊ณผ๊ฐ ๋๋์ง๋ ์ง๋ฌธ ๊ฒ์ํ์์๋ ArrayDeque๋ฅผ ์ธ ๋ ์ถ๊ฐ์ ์ธ ๋ฉ๋ชจ๋ฆฌ๊ฐ ์ฌ์ฉ๋๋ค๊ณ ํ๋๋ผ.
https://www.acmicpc.net/board/view/140376
์ด๋ด ๋๋ ArrayDeque์ ๋น์ทํ๊ฒ ์ฌ์ฉํ ์ ์๋ MutableList๋ฅผ ์ฌ์ฉํ๋ฉด ๋๋ค.
ํ์ ์์ ์ข ์ด์ ์์๋ฅผ ์ ์ฅํ ๋ณ์๋ฅผ ๋ง๋ค์ด์ผ ํ๋ค. ์ฒ์์๋ ๋ฌด์กฐ๊ฑด 1๋ฒ์งธ ํ์ ์ด ํฐ์ง๊ธฐ ๋๋ฌธ์ ์ด๊ธฐ๊ฐ์ 0์ผ๋ก ์ค์ ํ๋ฉด ์ฝ๊ฒ ์ฒซ ์ถ๋ ฅ์ ํ ์ ์๋ค. ์ข ์ด์ 0์ด ์ ํ๋ ๊ฒฝ์ฐ๋ ์๊ธฐ ๋๋ฌธ์ด๋ค.
List๋ฅผ ArrayDequeue์ฒ๋ผ ํ์ฉํ ๊ฒ์ด๊ธฐ ๋๋ฌธ์ ์ถ๋ ฅํด์ผ ํ๋ ๊ฐ์ ์ฒซ index๋ก ์ค๋๋ก ํ ๊ฒ์ด๋ค.
์ถ๋ ฅํ ๊ฒฐ๊ณผ๋ ์ญ์ ํ๋ค. ์ด๋ฅผ ์ฝ๋๋ก ๋ํ๋ด ๋ณด๋ฉด ์๋์ ๊ฐ๋ค.
answer.append("${balloon.first().number} ")
popIndex = balloon.first().paper
balloon.removeAt(0)
balloon์ด ๋ชจ๋ ๋น ์ง ๋๊น์ง ๋ฐ๋ณตํด ์ฃผ๋ฉด ๋๋ค.
popIndex๊ฐ ํฐ์ง ํ์ ์ ์ ํ์๋ ์ซ์ ๋ฐ์ดํฐ์ด๋ค.
<์กฐ๊ฑด 1>
popIndex๊ฐ ์์์ด๋ฉด ์ฒซ ๋ฒ์งธ ๊ฐ์ ๋งจ ๋ค๋ก ๋ณด๋ด๋ฉด์ ์ํํ๊ณ , ์์์ด๋ฉด ๋ง์ง๋ง ๊ฐ์ ๋งจ ์์ผ๋ก ๋ณด๋ด๋ฉด์ ์ํํ๋ค.
if (popIndex != 0) {
while (rotateCnt != abs(popIndex)) {
if (popIndex > 0) {
val first = balloon.first()
balloon.removeFirst()
balloon.add(first)
} else {
val last = balloon[balloon.lastIndex]
balloon.removeLast()
balloon.add(0, last)
}
rotateCnt++
}
}
rotateCnt๋ ์์ง์ธ ํ์์ด๋ค.
rotateCnt๊ฐ popIndex์ ์ ๋๊ฐ๊ณผ ๊ฐ์ ๋๊น์ง ๋ฐ๋ณตํ๋ค.
๋ฌธ์ ํด๊ฒฐ ์ฝ๋
import java.io.BufferedReader
import java.io.InputStreamReader
import java.util.StringTokenizer
import kotlin.math.abs
private data class Balloon(
val number: Int,
var paper: Int
)
fun main() = with(BufferedReader(InputStreamReader(System.`in`))) {
val balloon = mutableListOf<Balloon>()
val cnt = readLine().toInt()
val numbers = StringTokenizer(readLine())
for (i in 0 until cnt) {
balloon.add(Balloon(i + 1, numbers.nextToken().toInt()))
}
val answer = StringBuilder()
var popIndex = 0
while (balloon.isNotEmpty()) {
var rotateCnt = if (popIndex > 0) 1 else 0
if (popIndex != 0) {
while (rotateCnt != abs(popIndex)) {
if (popIndex > 0) {
val first = balloon.first()
balloon.removeFirst()
balloon.add(first)
} else {
val last = balloon[balloon.lastIndex]
balloon.removeLast()
balloon.add(0, last)
}
rotateCnt++
}
}
answer.append("${balloon.first().number} ")
popIndex = balloon.first().paper
balloon.removeAt(0)
}
println(answer)
}
๋ฌธ์ ํ์ด
ํ์ ์ ์ ๋ณด๋ฅผ ์ ์ฅํ data class๋ฅผ ์์ฑํด ์ฃผ์๋ค. MutableList์ ์ฌ์ฉ๋ ๊ฒ์ด๋ค.
balloon list๋ฅผ ๋ง๋ค์ด์ ์ ๋ ฅ๊ฐ๊ณผ ๋ฒํธ๋ฅผ ํจ๊ป ๊ตฌ์ฑํ๋ค.
rotateCnt๋ ์์์ผ ๋๋ 1๋ก, ์์์ผ ๋๋ 0์ผ๋ก ์ค์ ํ๋ค.
๊ทธ ์ด์ ๋ ์์์ธ ๊ฒฝ์ฐ์๋ ์ด์ ์ ๊ฐ์ด ์ง์์ง๋ฉด์ 1์นธ ์์ผ๋ก ์ฎ๊ฒจ์ ธ ์ด๋ฏธ 1๋ฒ ์ด๋ํ ์ํ์ด๊ธฐ ๋๋ฌธ์ 1๋ก ์ด๊ธฐํํด ์ฃผ๋ ๊ฒ์ด๋ค. ์์์ธ ๊ฒฝ์ฐ์๋ ๊ทธ๊ฒ ์๋๊ธฐ ๋๋ฌธ์ 0์ผ๋ก ์ด๊ธฐํํด ์ฃผ๋ ๊ฒ์ด๋ค.
rotateCnt๊ฐ popIndex์ ์ ๋๊ฐ๊ณผ ๊ฐ์์ง ๋๊น์ง ์ํํ๋ค.
์ํ๊ฐ ๋๋๊ณ ์ฒซ ๋ฒ์งธ ๊ฐ์ ํ์ ๋ฒํธ๋ฅผ ์ถ๋ ฅํ๊ณ ์ข ์ด์ ์ ํ ๊ฐ์ popIndex์ ์ ์ฅํ๋ค. ๊ทธ๋ฆฌ๊ณ ์ฒซ ๋ฒ์งธ ๊ฐ์ ์ง์ด๋ค.
๋ฌธ์ ํด๊ฒฐ ๊ณผ์
๋ฉ๋ชจ๋ฆฌ ์ ํ์ด 4MB์ธ ๋ฌธ์ , mutableList ๋๋ถ์ ์ด๋ ต์ง ์๊ฒ ํด๊ฒฐํ๋ค.
index ์ด๋์ ์ ์๊ฐํด์ผ ํ๋ค. ๋ฐฐ์ด์ ์ฐ๋ ๋ฌธ์ ๊ฐ ๊ทธ๋ ๋ฏ ์ค์ํ๊ธฐ ์ฌ์ด ๋ฌธ์ ์ด๋ค.
๋ฑ์ ์ฐ๋ ๋ฌธ์ ์ธ๋ฐ Kotlin์ผ๋ก๋ ArrayDeque๋ฅผ ์ธ ์ ์๋ ์์ด๋ฌ๋ํ ๋ฌธ์ .
'๐ฏ | ๋ฐฑ์ค > ๐ | Silver' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Kotlin, S3] ๋ฐฑ์ค 1002๋ฒ ํฐ๋ (0) | 2024.08.20 |
---|---|
[Kotlin, S3] ๋ฐฑ์ค 1004๋ฒ ์ด๋ฆฐ ์์ (0) | 2024.08.19 |
[Kotlin, S5] ๋ฐฑ์ค 30010๋ฒ ์๋ชป๋ ๋ฒ๋ธ์ ๋ ฌ (0) | 2024.08.17 |
[Kotlin, S5] ๋ฐฑ์ค 1813๋ฒ ๋ ผ๋ฆฌํ ๊ต์ (0) | 2024.08.16 |
[Kotlin, S3] ๋ฐฑ์ค 15649๋ฒ N๊ณผ M(1) (0) | 2024.08.13 |