๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
๐Ÿ’ฏ | ๋ฐฑ์ค€/๐Ÿ™‚ | Silver

[Kotlin, S3] ๋ฐฑ์ค€ 31409๋ฒˆ ์ฐฉ์‹  ์ „ํ™˜ ์†Œ๋™

by immgga 2024. 8. 2.

์ถœ์ฒ˜: unsplash.com

 

์ฐฉ์‹  ์ „ํ™˜ ์†Œ๋™(31409๋ฒˆ)

Silver 3

#๊ทธ๋ž˜ํ”„ ์ด๋ก  #์• ๋“œ ํ˜น #ํ•ด ๊ตฌ์„ฑํ•˜๊ธฐ #ํ•จ์ˆ˜ํ˜• ๊ทธ๋ž˜ํ”„

 

๋ฌธ์ œ ๋‚ด์šฉ

 

 

๋ฌธ์ œ ์ ‘๊ทผ

์ „ํ™”๊ธฐ๊ฐ€ ์ฃผ์–ด์กŒ์„ ๋•Œ, ์ฐฉ์‹  ์ „ํ™˜์„ ํ•ด์„œ ๋ชจ๋“  ์ „ํ™”๊ธฐ๋ฅผ ๋จนํ†ต์œผ๋กœ ๋งŒ๋“œ๋Š” ์ตœ์†Œ์˜ ๊ฒฝ์šฐ๋ฅผ ๊ตฌํ•ด์•ผ ํ•˜๋Š” ๋ฌธ์ œ์ด๋‹ค.

๋ฌธ์ œ ๋ณธ๋ฌธ์˜ ์˜ˆ์‹œ๋ฅผ ๋“ค๋ฉด, A => B, B => C, C => A ์ˆœ์œผ๋กœ ์ „ํ™”๋ฅผ ์—ฐ๊ฒฐํ•˜๊ณ  ์žˆ๋‹ค.

3๊ฐœ์˜ ์ „ํ™”๊ธฐ๊ฐ€ ๋ฌดํ•œ ์‚ฌ์ดํด์„ ๋Œ๊ณ  ์žˆ๋‹ค๋Š” ๊ฒƒ์„ ์•Œ ์ˆ˜ ์žˆ๋‹ค.

์ „ํ™”๊ธฐ ์—ฌ๋Ÿฌ ๊ฐœ๋ฅผ ๋ฌดํ•œ ์‚ฌ์ดํด์„ ๋Œ๋ฆฌ๋Š” ๋ฐฉ๋ฒ•์€ ๋‹ค์–‘ํ•˜๋‹ค.

๋ฌธ์ œ์˜ ์ž…๋ ฅ ์˜ˆ์ œ๋งŒ ๋ด๋„ ์•Œ ์ˆ˜ ์žˆ๋‹ค.

์ž…๋ ฅ ์˜ˆ์ œ 2๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์ž…๋ ฅ์„ ๋ฐ›๋Š”๋‹ค.

5
2 1 5 3 4

์œ„ ์ž…๋ ฅ๊ฐ’์„ ๊ทธ๋ž˜ํ”„๋กœ ๋‚˜ํƒ€๋‚ด๋ฉด ์•„๋ž˜์™€ ๊ฐ™๋‹ค.

์‚ฌ์ง„ 1-1

๊ทธ๋ž˜ํ”„์˜ ์ „ํ™”๊ฐ€ ์„œ๋กœ ์ด์–ด์ ธ์„œ ๋ฌดํ•œํ•œ ์‚ฌ์ดํด์„ ํ˜•์„ฑํ–ˆ๋‹ค. ์ด ๊ฒฝ์šฐ์—๋Š” ์ด๋ฏธ ๋จนํ†ต ์ƒํƒœ์ด๋ฏ€๋กœ, ๋ฐ”๊ฟ”์ฃผ์ง€ ์•Š์•„๋„ ๋œ๋‹ค.

 

๊ฐ ์ „ํ™”๊ธฐ์— ์—ฐ๊ฒฐ๋œ ์ „ํ™”๊ธฐ๋ฅผ ํ™•์ธํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” Map์„ ์ด์šฉํ•ด ์–ด๋–ค ์ „ํ™”์— ์—ฐ๊ฒฐ๋˜์–ด ์žˆ๋Š”์ง€ ํ™•์ธํ•  ํ•„์š”๊ฐ€ ์žˆ๋‹ค.

// graph ๊ตฌ์กฐ: key = ์ „ํ™”๊ธฐ ๋ฒˆํ˜ธ, value = ๊ฑธ๋ ค ์žˆ๋Š” ์ „ํ™”๊ธฐ ๋ฒˆํ˜ธ
private val graph = mutableMapOf<Int, Int>()

 

 

์ž…๋ ฅ ์˜ˆ์ œ 3์€ ์ „ํ™”๊ธฐ ๋ฒˆํ˜ธ, ์—ฐ๊ฒฐ๋œ ์ „ํ™”๊ธฐ๋ฅผ map์œผ๋กœ ํ™•์ธํ•ด ๋ณด๋ฉด์„œ ํŒŒ์•…ํ•ด ๋ณด์ž.

4
4 4 4 4

์ž…๋ ฅ ์˜ˆ์ œ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™๊ณ , ์ „ํ™”๊ธฐ์˜ ๋ฒˆํ˜ธ๋Š” ์ž…๋ ฅ ์ˆœ์„œ๋Œ€๋กœ ์ฃผ์–ด์ง€๊ณ , ์—ฐ๊ฒฐ๋œ ์ „ํ™”๊ธฐ๋Š” ์ž…๋ ฅ๋œ ๊ฐ’์„ ๋œปํ•œ๋‹ค.

์ด๋ฅผ ์ด์šฉํ•ด Map์„ ๊ตฌ์„ฑํ•ด ๋ณด๋ฉด ์•„๋ž˜์™€ ๊ฐ™๋‹ค.

{1 : 4,
2 : 4,
3 : 4,
4 : 4}

์ž…๋ ฅ ์ˆœ์œผ๋กœ ์ „ํ™”๊ธฐ ๋ฒˆํ˜ธ๊ฐ€ ์ฃผ์–ด์ง€๊ณ , ์ž…๋ ฅ๋œ ๊ฐ’์ด ์ „ํ™”๊ธฐ ๋ฒˆํ˜ธ์ด๋‹ค.

์ด ์˜ˆ์ œ์˜ ์ •๋‹ต์„ ๊ทธ๋ž˜ํ”„์™€ Map์œผ๋กœ ๋‚˜ํƒ€๋‚ด๋ณด์ž.

์‚ฌ์ง„ 1-2

// ์ž…๋ ฅ ์˜ˆ์ œ 3
{1 : 4,
2 : 4,
3 : 4,
4 : 3}

// ์ž…๋ ฅ ์˜ˆ์ œ 2
{1 : 2,
2 : 1,
3 : 5,
4 : 3,
5 : 4}

์œ„์˜ ๊ฒฝ์šฐ์—๋„ ๋ฌดํ•œํ•œ ์‚ฌ์ดํด์ด  ์ƒ์„ฑ๋œ ๊ฒƒ์„ ๋ณผ ์ˆ˜ ์žˆ๋‹ค.

์œ„ Map์„ ๋ณด๊ณ  ํ•˜๋‚˜์˜ ์‚ฌ์‹ค์„ ์•Œ ์ˆ˜ ์žˆ๋‹ค.

๋ฌดํ•œ ์‚ฌ์ดํด์ด ์ ์šฉ๋˜๊ธฐ ์œ„ํ•ด์„œ๋Š” ์ „ํ™”๊ธฐ ๋ฒˆํ˜ธ์™€ ์—ฐ๊ฒฐ๋œ ์ „ํ™”๊ธฐ๊ฐ€ ๊ฐ™์œผ๋ฉด ์•ˆ ๋œ๋‹ค.
์ฆ‰, ์ฐฉ์‹  ์ „ํ™˜์ด ๊ฑธ๋ ค ์žˆ์ง€ ์•Š์€ ์ „ํ™”๊ธฐ๊ฐ€ ์—†์–ด์•ผ ๋ฌดํ•œ ์‚ฌ์ดํด์ด ํ˜•์„ฑ๋œ๋‹ค.

์ด ์‚ฌ์‹ค์„ ์ด์šฉํ•ด ๊ฐ’์„ ์ž…๋ ฅ๋ฐ›์„ ๋•Œ ์ „ํ™”๊ธฐ ๋ฒˆํ˜ธ์™€ ๊ฑธ๋ ค ์žˆ๋Š” ์ „ํ™”๊ธฐ๊ฐ€ ๊ฐ™์€์ง€ ํ™•์ธํ•ด ์ฃผ๋Š” ์ž‘์—…์ด ํ•„์š”ํ•˜๋‹ค.

์ด๋ฅผ Kotlin ์ฝ”๋“œ๋กœ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์ด ๋‚˜ํƒ€๋‚ผ ์ˆ˜ ์žˆ๋‹ค.

 

<์กฐ๊ฑด 1>

i == calling[i]

i๊ฐ€ ์ „ํ™”๊ธฐ ๋ฒˆํ˜ธ์ด๊ณ , calling์ด ํ˜„์žฌ ์—ฐ๊ฒฐ๋˜์–ด ์žˆ๋Š” ์ „ํ™”๊ธฐ๋ฅผ ๋œปํ•  ๋•Œ, ์ „ํ™”๊ธฐ ๋ฒˆํ˜ธ์™€ ํ˜„์žฌ ์—ฐ๊ฒฐ๋œ ์ „ํ™”๊ธฐ๊ฐ€ ๊ฐ™์œผ๋ฉด ์ฐฉ์‹  ์ „ํ™˜์ด ๊ฑธ๋ ค ์žˆ๋Š” ์ƒํƒœ๊ฐ€ ์•„๋‹ˆ๊ธฐ ๋•Œ๋ฌธ์— ์œ„ ์กฐ๊ฑด์„ ๋งŒ์กฑํ•˜๋ฉด ํ•ด๋‹น ์ „ํ™”๊ธฐ์— ๋‹ค๋ฅธ ์ „ํ™”๋ฅผ ์—ฐ๊ฒฐํ•ด ์ฃผ๋ฉด ๋œ๋‹ค.

 

 

๋ฌธ์ œ ํ•ด๊ฒฐ ์ฝ”๋“œ

๋”๋ณด๊ธฐ
import java.io.BufferedReader
import java.io.InputStreamReader

fun main() = with(BufferedReader(InputStreamReader(System.`in`))) {
    val cellPhoneCnt = readLine().toInt()
    val calling = mutableListOf(0)
    val phone = readLine().split(" ").map { it.toInt() }
    var changeCnt = 0

    calling.addAll(phone)
    for (i in 1 .. cellPhoneCnt) {
        if (i == calling[i]) {
            val toChange = if (i == cellPhoneCnt) 1 else cellPhoneCnt
            calling[i] = toChange
            changeCnt++
        }
    }

    println(changeCnt)
    println(calling.filter { it != 0 }.joinToString(" "))
}

 

๋ฌธ์ œ ํ’€์ด

๋ฌธ์ œ ์ ‘๊ทผ์—์„œ๋Š” Map์„ ์˜ˆ์‹œ๋กœ ๋“ค์—ˆ์ง€๋งŒ ํ•ด๊ฒฐ ์ฝ”๋“œ์—์„œ๋Š” List์˜ index๋ฅผ ํ˜„์žฌ ์ „ํ™”๊ธฐ ๋ฒˆํ˜ธ๋กœ ๊ฐ€์ •ํ•˜๊ณ , index์˜ ๊ฐ’์„ ๊ฑธ๋ ค ์žˆ๋Š” ์ „ํ™”๊ธฐ๋กœ ๊ฐ€์ •ํ•˜๊ณ  ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ–ˆ๋‹ค.

 

calling list์— ์ „ํ™”๊ธฐ ๋ฒˆํ˜ธ๊ฐ€ 0์ธ ๊ฒฝ์šฐ๋Š” ์—†์œผ๋ฏ€๋กœ 0์„ ๋ฉ”์›Œ ์ฃผ๊ณ , 1๋ฒˆ์งธ index๋ถ€ํ„ฐ ์ž…๋ ฅ๋œ ๊ฐ’์„ ์ „๋ถ€ ๋„ฃ์–ด ์ค€๋‹ค.

์œ„์— ์–ธ๊ธ‰ํ•œ <์กฐ๊ฑด 1>์„ ๋งŒ์กฑํ•œ ๊ฒฝ์šฐ, ๊ธฐ์กด ์—ฐ๊ฒฐ๋œ ์ „ํ™”๋ฅผ ๋‹ค๋ฅธ ์ „ํ™”๋กœ ๋ฐ”๊ฟ” ์ฃผ์–ด์•ผ ํ•œ๋‹ค.

์–ด๋–ค ๊ฐ’์œผ๋กœ ๋ฐ”๊พธ๋˜ ์ƒ๊ด€์—†๊ธฐ ๋•Œ๋ฌธ์—, ๋งˆ์ง€๋ง‰ ์ „ํ™”๊ธฐ ๋ฒˆํ˜ธ์ธ ๊ฒฝ์šฐ์—๋Š” 1, ๊ทธ๋ ‡์ง€ ์•Š์„ ๋•Œ๋Š” ๋งˆ์ง€๋ง‰ ์ „ํ™”๋กœ ์ „ํ™”๋ฅผ ๊ฑธ ์ˆ˜ ์žˆ๋„๋ก ํ•ด์ฃผ์—ˆ๋‹ค.

 

์ถœ๋ ฅํ•  ๋•Œ๋Š” calling์— 0๋ฒˆ์งธ ๊ฐ’์„ ์ถœ๋ ฅํ•˜์ง€ ์•Š๋„๋ก ์ž˜ ๊ฑธ๋Ÿฌ์„œ ์ถœ๋ ฅํ•œ๋‹ค.

 

 

๋ฌธ์ œ ํ•ด๊ฒฐ ๊ณผ์ •

์“ธ๋ฐ์—†์ด ์žฌ๊ท€๋กœ ๋ฌธ์ œ๋ฅผ ํ’€์–ด ๋ณด๋ ค๋‹ค๊ฐ€ ์“ด๋ง›์„ ๋ณด๊ณ  ์œ„์˜ ๋ฌธ์ œ ํ•ด๊ฒฐ๋ฒ•์„ ์ฐพ์•„์„œ ํ•ด๊ฒฐํ•œ ๋ฌธ์ œ์ด๋‹ค.

์ฒ˜์Œ์—๋Š” ๊ฐ ์ „ํ™”์— ๊ฑธ๋ ค ์žˆ๋Š” ๊ฐ’์œผ๋กœ ๊ณ„์† ์žฌ๊ท€๋กœ ๋“ค์–ด๊ฐ€๋ฉด์„œ ๋“ค์–ด๊ฐ„ ๊ฐ’์ด ์ฐฉ์‹  ์ „ํ™˜์ด ์•ˆ๋œ ์ „ํ™”์ธ ๊ฒฝ์šฐ์—๋งŒ ๊ฐ’์„ ๋ณ€๊ฒฝํ•ด ์ฃผ์—ˆ๋‹ค. ๊ทธ๋ ‡๊ฒŒ ํ•˜๋‹ˆ๊นŒ 94%์ฏค์—์„œ ํ‹€๋ ธ๋‹ค๊ณ  ๋‚˜์˜ค๋”๋ผ.

๊ทธ๋ž˜์„œ ๋ฌธ์ œ ํ•ด์„ค์—์„œ ํžŒํŠธ๋ฅผ ์–ป์–ด์„œ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•ด ์ฃผ์—ˆ๋‹ค.

728x90