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

[Kotlin, S1] ๋ฐฑ์ค€ 2205๋ฒˆ ์ €์šธ ์ถ” ๋งŒ๋“ค๊ธฐ

by immgga 2025. 1. 7.
๋ฐ˜์‘ํ˜•

์ถœ์ฒ˜: unsplash.com

 

์ €์šธ ์ถ” ๋งŒ๋“ค๊ธฐ(2205๋ฒˆ)

Silver 1

#์ˆ˜ํ•™ #๊ทธ๋ฆฌ๋”” ์•Œ๊ณ ๋ฆฌ์ฆ˜

https://www.acmicpc.net/problem/2205

 

๋ฌธ์ œ ๋‚ด์šฉ

 

 

๋ฌธ์ œ ์ ‘๊ทผ

1๋ถ€ํ„ฐ n๊นŒ์ง€์˜ ๋ฌด๊ฒŒ๋ฅผ ๊ฐ€์ง„ ๋‚ฉ๊ณผ ์ฃผ์„์„ ํ•ฉ์ณ์„œ 2์˜ ์ œ๊ณฑ์ˆ˜์˜ ๋ฌด๊ฒŒ๋ฅผ ๊ฐ€์ง€๋Š” ์ €์šธ์ถ”๋ฅผ ๋งŒ๋“ค์–ด์•ผ ํ•œ๋‹ค.

๊ฐ ๋ฌด๊ฒŒ๋ฅผ ๊ฐ€์ง€๋Š” ๋ฉ์–ด๋ฆฌ๋Š” ์ค‘๋ณตํ•ด์„œ ์‚ฌ์šฉ์ด ๋ถˆ๊ฐ€๋Šฅํ•˜๋‹ค.

 

n์ด 1๋ถ€ํ„ฐ 5๊นŒ์ง€ ์ด๋ฃจ์–ด์ ธ ์žˆ์„ ๋•Œ, n์ด 5์ผ ๋•Œ๋Š” 3์„ ๋Œ€์ž…ํ•ด์„œ 8์„ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋‹ค. 4์ผ ๋•Œ๋Š” ์ฃผ์„์˜ ๋ฌด๊ฒŒ๋ฅผ ์ถ”๊ฐ€ํ•ด์„œ (4, 4) ์กฐํ•ฉ์œผ๋กœ 8์„ ๋งŒ๋“ค ์ˆ˜ ์žˆ๊ณ  ์ฃผ์„์ด 3์ผ ๋•Œ๋Š” (3, 5)์˜ ์กฐํ•ฉ์œผ๋กœ ์ €์šธ์ถ”๋ฅผ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋‹ค.

์ •์˜๋œ ๋ฌด๊ฒŒ๋ฅผ ๋งŒ๋“ค๊ธฐ ์œ„ํ•ด ์ฃผ์„์ด ์ปค์ง€๋ฉด ๋‚ฉ์ด ์ž‘์•„์ง€๊ณ , ๋‚ฉ์ด ์ปค์ง€๋ฉด ์ฃผ์„์ด ์ž‘์•„์ง€๋Š” ํŠน์ง•์„ ์ด์šฉํ•ด ์ค‘๋ณต์„ ํ—ˆ์šฉํ•˜์ง€ ์•Š๊ณ  ์ฃผ์„์˜ ๋ฌด๊ฒŒ๋ฅผ ๊ตฌ์„ฑํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋œ๋‹ค.

 

์ €์šธ์ถ”์˜ ๋ฌด๊ฒŒ๋Š” ํ˜„์žฌ ๋‚ฉ์˜ ๊ฐœ์ˆ˜์—์„œ ๋‹ค์Œ์œผ๋กœ ํฐ 2์˜ ์ œ๊ณฑ์ˆ˜๋กœ ์ •ํ•ด์ค˜์•ผ ํ•œ๋‹ค.

n = 5์ผ ๋•Œ๋Š” 8, n = 9์ผ ๋•Œ๋Š” 16

 

์ •์˜๋œ ์ €์šธ์ถ”์˜ ๋ฌด๊ฒŒ์™€ n์„ ํ†ตํ•ด ์ฃผ์„์„ ๋ถ€์—ฌํ•  ์ˆ˜ ์žˆ๋Š” ๋‚ฉ์˜ ๊ฐœ์ˆ˜๋ฅผ ๊ตฌํ•  ์ˆ˜ ์žˆ๋‹ค.

์ €์šธ์ถ”์˜ ๋ฌด๊ฒŒ๋ฅผ cw๋ผ๊ณ  ํ•  ๋•Œ, cw - n์„ ํ•˜๊ฒŒ ๋˜๋ฉด cw - n๋ถ€ํ„ฐ n๋ฒˆ์งธ ๋‚ฉ๊นŒ์ง€ ์ฃผ์„์„ ๋ถ€์—ฌํ•  ์ˆ˜ ์žˆ๋‹ค.

cw = 16, n = 9์ผ ๋•Œ, 7๋ถ€ํ„ฐ 9๊นŒ์ง€์˜ ๋‚ฉ์— ์ฃผ์„์„ ๋ถ€์—ฌํ•  ์ˆ˜ ์žˆ๋‹ค.

(9, 7), (8, 8), (7, 9)

 

๊ทธ๋Ÿฌ๋ฉด ๋‚จ์€ ๋‚ฉ์˜ ๊ฐœ์ˆ˜๋Š” cw - n - 1์ด ๋œ๋‹ค.

 

 

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

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

fun main() {
    val bf = BufferedReader(InputStreamReader(System.`in`))
    var n = bf.readLine().toInt()
    val weight = Array(n + 1) { 0 }

    while (n > 0) {
        // ๋‚ฉ์˜ ๊ฐœ์ˆ˜๋ฅผ ์ด์šฉํ•ด ๋งŒ๋“ค ์ˆ˜ ์žˆ๋Š” ์ €์šธ์ถ”์˜ ๋ฌด๊ฒŒ ๊ตฌํ•˜๊ธฐ
        var cw = 1
        while (cw <= n) {
            // ํ˜„์žฌ ๋‚ฉ์˜ ๊ฐœ์ˆ˜๋ณด๋‹ค ๊ทธ ๋‹ค์Œ์œผ๋กœ ํฐ 2์˜ ์ œ๊ณฑ์ˆ˜๋ฅผ ๊ตฌํ•˜๊ธฐ
            cw *= 2
        }

        // ๋‚˜์—ด ์‹œ์ž‘
        val start = cw - n  // ๋‚˜์—ด์„ ์‹œ์ž‘ํ•  index
        for (i in start .. n) {
            // i๋ฒˆ์งธ ๋‚ฉ์— ํ•ด๋‹นํ•˜๋Š” ์ฃผ์„์˜ ๋ฌด๊ฒŒ๋ฅผ ๊ตฌํ•˜๊ธฐ -> ์ค‘๋ณต๋˜์ง€ ์•Š๊ฒŒ ์ฃผ์„์˜ ๋ฌด๊ฒŒ๋ฅผ ์ •ํ•  ์ˆ˜ ์žˆ์Œ
            weight[i] = cw - i
        }

        // ๋‚จ์€ ๋‚ฉ์˜ ๊ฐœ์ˆ˜๋ฅผ ์ •์˜
        n = start - 1
    }

    val answer = StringBuilder()
    for (i in 1 until weight.size) {
        answer.append("${weight[i]}\n")
    }

    println(answer)
}

 

๋ฌธ์ œ ํ’€์ด

ํ˜„์žฌ n์— ๋”ฐ๋ผ cw๋ฅผ ์ •ํ•ด์ค€๋‹ค.

cw๋Š” n๋ณด๋‹ค ํฐ 2์˜ ์ œ๊ณฑ์ˆ˜๋“ค ์ค‘ ๊ฐ€์žฅ ์ž‘์€ 2์˜ ์ œ๊ณฑ์ˆ˜์ด๋‹ค.

 

start๋กœ ๋‚˜์—ด์„ ์‹œ์ž‘ํ•  ๋‚ฉ์˜ ์‹œ์ž‘ ์ง€์ ์„ ์ •ํ•˜๊ณ  n๋ฒˆ ๋‚ฉ๊นŒ์ง€ ์ฃผ์„์„ ์ •์˜ํ•œ๋‹ค.

์ฃผ์„์€ cw - i๋กœ ์ •ํ•  ์ˆ˜ ์žˆ๋‹ค.

 

๋งˆ์ง€๋ง‰์— ์ฃผ์„์˜ ๋ฌด๊ฒŒ๊ฐ€ ์ •ํ•ด์ง€์ง€ ์•Š์€ ๋‚ฉ์˜ ๊ฐœ์ˆ˜๋ฅผ ๊ตฌํ•œ๋‹ค.

 

์ง„ํ–‰ ํ”„๋กœ์„ธ์Šค(n = 10)

 

 

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

์ €์šธ์ถ”์˜ ๋ฌด๊ฒŒ์—์„œ ๋‚ฉ์˜ ๋ฌด๊ฒŒ๋ฅผ ๋นผ์„œ ์ฃผ์„์˜ ํฌ๊ธฐ๋ฅผ ์ •ํ•ด ์ค‘๋ณต์„ ์—†์• ๋Š” ๊ฒƒ์„ ์•Œ์•„๋‚ด๋Š” ๊ฒƒ์€ ์–ด๋ ต์ง€ ์•Š์•˜๋Š”๋ฐ,

์–ผ๋งˆ๋งŒํผ์˜ ๋‚ฉ๋“ค์— ์ฃผ์„์„ ์ฑ„์›Œ์•ผ ํ•˜๋Š”์ง€ ์•Œ์•„๋‚ด๋Š” ๊ฒƒ์ด ์–ด๋ ค์› ๋‹ค.

 

์ง์ ‘ ๋‹ต์„ ๊ตฌํ•ด๋ณด๋ฉด์„œ ํžŒํŠธ๋ฅผ ์–ป์„ ์ˆ˜ ์žˆ์—ˆ๋‹ค.

728x90
๋ฐ˜์‘ํ˜•