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

[Kotlin, S1] ๋ฐฑ์ค€ 5525๋ฒˆ IOIOI

by immgga 2024. 8. 6.

์ถœ์ฒ˜: unsplash.com

 

IOIOI(5525๋ฒˆ)

Silver 1

#๋ฌธ์ž์—ด

 

๋ฌธ์ œ ๋‚ด์šฉ

 

 

๋ฌธ์ œ ์ ‘๊ทผ

์ฒซ ์ค„์˜ ์ž…๋ ฅ์œผ๋กœ O๊ฐ€ ๋ช‡ ๊ฐœ ๋“ค์–ด ์žˆ๋Š”์ง€ ํ™•์ธํ•œ๋‹ค.

์˜ˆ๋ฅผ ๋“ค์–ด O = 1์ด๋ฉด IOI, O = 3์ด๋ฉด IOIOIOI์ด ๋œ๋‹ค. ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๋ฌธ์ž์—ด์„ IOI ๋ฌธ์ž์—ด์ด๋ผ๊ณ  ๋ถ€๋ฅด๊ฒ ๋‹ค.

IOI ๋ฌธ์ž์—ด์ด 3๋ฒˆ์งธ ์ค„์— ์ž…๋ ฅ๋˜์–ด ์žˆ๋Š” ๋ฌธ์ž์—ด์— ๋ช‡ ๊ฐœ๊ฐ€ ํฌํ•จ๋˜์–ด ์žˆ๋Š”์ง€ ๊ตฌํ•ด์•ผ ํ•œ๋‹ค.

IOI ๋ฌธ์ž์—ด์ด IOIOI์ด๊ณ , ๋ฌธ์ž์—ด์ด IIOIOIOIIOO์ผ ๋•Œ๋Š”,

1. IIOIOIOIIOO

2. IIOIOIOIIOO

๋กœ ์ด 2๊ฐ€์ง€์˜ ๊ฒฝ์šฐ๋ฅผ ๊ตฌํ•  ์ˆ˜ ์žˆ๋‹ค. ๊ฒน์น˜๋Š” ๊ฒฝ์šฐ๊นŒ์ง€ ์ƒ๊ฐํ•ด์•ผ ํ•œ๋‹ค.

 

IOI๋ฌธ์ž์—ด์€ ์ฒ˜์Œ์— I๋กœ ์‹œ์ž‘ํ•˜๊ณ  ์ญ‰ ๊ณ„์† OI๊ฐ€ ๋ฐ˜๋ณต๋œ๋‹ค๋Š” ๊ทœ์น™์ด ์žˆ๋‹ค.

O = 1์ผ ๋•Œ IOI,

O = 3์ผ ๋•Œ IOIOIOI ์ธ ๊ฒƒ์ฒ˜๋Ÿผ.

์ด๋ฅผ ์ด์šฉํ•ด ์ฒ˜์Œ์— ์‹œ์ž‘ ๋ฌธ์ž๊ฐ€ I๋กœ ์‹œ์ž‘ํ•˜๊ณ , ๊ทธ๋‹ค์Œ์— OI๊ฐ€ ์—ฐ์†๋˜๋Š”์ง€ ์ฒดํฌํ•˜๋ฉด ๋œ๋‹ค.

 

์˜ˆ์ œ ์ž…๋ ฅ 1์˜ 3๋ฒˆ์งธ ์ค„์˜ ๋ฌธ์ž์—ด์„ ์˜ˆ๋กœ ๋“ค์–ด ๋ณด๊ฒ ๋‹ค.

OOIOIOIOIIOII

๋‹ค์Œ๊ณผ ๊ฐ™์€ ๋ฌธ์ž์—ด์—์„œ ์œ„์—์„œ ์–ธ๊ธ‰ํ•œ ๋ฐฉ์‹์„ ์ ์šฉํ•ด ๋ณด์ž.

์‚ฌ์ง„ 1-1

s๋Š” ์ž…๋ ฅ ๋ฌธ์ž์—ด์„ ํ•˜๋‚˜์”ฉ ํ™•์ธํ•˜๋Š” ๊ฒƒ์ด๋‹ค.

check๋Š” ํ˜„์žฌ ๋ฌธ์ž์—ด์ด OI๊ฐ€ ๋ฐ˜๋ณต๋˜๋Š”์ง€ ํ™•์ธํ•˜๋Š” ๊ฒƒ์ด๋‹ค. ์ฒ˜์Œ์— I๊ฐ€ ์‹œ์ž‘๋˜๋ฉด ํ˜„์žฌ ๋ฌธ์ž์—ด์„ ์ฒดํฌํ•˜๊ธฐ ์‹œ์ž‘ํ•œ๋‹ค.

ioCnt๋Š” ์ตœ์ข… ์—ฐ์†๋œ OI์˜ ๊ฐœ์ˆ˜๋ฅผ ๋‚˜ํƒ€๋‚ผ ๊ฒƒ์ด๋‹ค. ์—ฐ์† OI๊ฐ€ ๋Š๊ธฐ๋ฉด ์ƒˆ๋กœ์šด ํ•„๋“œ๋ฅผ ์ƒ์„ฑํ•ด ๊ทธ ํ•„๋“œ์— ์ƒˆ๋กœ ๊ธฐ๋กํ•œ๋‹ค.

 

์œ„์˜ ์˜ˆ์ œ์˜ ๊ฒฐ๊ณผ๋ฅผ ํ‘œ๋กœ ๋‚˜ํƒ€๋‚ด ๋ดค๋‹ค. ioCnt๋ฅผ ๋ณด๊ณ  ํ˜„์žฌ IOI ๋ฌธ์ž์—ด๊ณผ ๋น„๊ต๋ฅผ ํ•ด์„œ ๊ฐ’์„ ๊ตฌํ•ด์ค„ ์ˆ˜ ์žˆ๋‹ค.

์œ„ ํ‘œ์˜ ioCnt๋Š” 3, 1, 0์ด๋‹ค. 0์ธ ๊ฒฝ์šฐ๋ฅผ ๋นผ๋ฉด 3, 1๋งŒ ๋‚จ๋Š”๋‹ค.

์—ฌ๊ธฐ์„œ O = 1์ธ ๊ฒฝ์šฐ์—๋Š” ๊ณต๊ฐ„์„ 1์”ฉ ์ฐจ์ง€ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ํฌํ•จ๋œ ๊ฐœ์ˆ˜๋Š” 4๊ฐœ๊ฐ€ ๋œ๋‹ค.

O = 2์ธ ๊ฒฝ์šฐ๋Š” ๊ฒฝ์šฐ๊ฐ€ ์•ฝ๊ฐ„ ๋‹ค๋ฅด๋‹ค.

3์—์„œ ๊ณต๊ฐ„์„ 2์”ฉ ์ฐจ์ง€ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๊ฒฝ์šฐ์˜ ์ˆ˜๊ฐ€ 2๊ฐ€์ง€๊ฐ€ ๋œ๋‹ค. [1, 2]์™€ [2, 3]์ด๋‹ค. ๋ฌธ์ž๊ฐ€ ์—ฐ์†๋˜์–ด ์žˆ์–ด์•ผ ํ•˜๊ธฐ ๋•Œ๋ฌธ์— [3, 1]์€ ์•ˆ๋œ๋‹ค.

๋‹ค์Œ์˜ 1์€ ๊ณต๊ฐ„ 2๋ณด๋‹ค ๋ถ€์กฑํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๋„˜๊ธฐ๋ฉด ์ตœ์ข…์ ์ธ ํฌํ•จ ๊ฐœ์ˆ˜๋Š” 2๊ฐœ๊ฐ€ ๋œ๋‹ค.

 

์ด์ œ check์™€ ioCnt๊ฐ€ ๋ณ€๊ฒฝ๋˜๊ธฐ ์œ„ํ•ด ์–ด๋–ค ์กฐ๊ฑด์ด ํ•„์š”ํ•œ์ง€ ์ฝ”๋“œ๋ฅผ ์ด์šฉํ•ด์„œ ํ™•์ธํ•ด ๋ณด์ž.

 

<์กฐ๊ฑด 1>

check๋Š” ์ฒ˜์Œ์— ์ฒซ I๊ฐ€ ๋“ค์–ด์˜ค๊ธฐ ์ „๊นŒ์ง€๋Š” ๋นˆ ๋ฌธ์ž์—ด๋กœ ์กด์žฌํ•œ๋‹ค.

์ฒซ I๊ฐ€ ๋“ค์–ด์™”์Œ์„ ๋‚˜ํƒ€๋‚ผ ๋ณ€์ˆ˜๋ฅผ firstI๋กœ ์ง€์ •ํ•ด ์ฃผ๊ฒ ๋‹ค.

firstI๊ฐ€ true์—ฌ์•ผ ํ•˜๊ณ , ์ฒซ ๋ฌธ์ž๋Š” O์—ฌ์•ผ ํ•œ๋‹ค. OI์ˆœ์„œ๋Œ€๋กœ ์—ฐ์†๋ผ์•ผ ํ•˜๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค. ๋˜ํ•œ check๋„ ๋น„์–ด ์žˆ๋Š” ์ƒํƒœ์—ฌ์•ผ ํ•œ๋‹ค.

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

if (firstI && string[i] == 'O' && check.isEmpty())

 

<์กฐ๊ฑด 2>

์ด์ œ ์กฐ๊ฑด 1์„ ๋งŒ์กฑํ–ˆ์œผ๋ฉด check์— O๊ฐ€ ๋“ค์–ด์˜จ ์ƒํƒœ์ผ ๊ฒƒ์ด๋‹ค.

์กฐ๊ฑด 1๊ณผ ๋งˆ์ฐฌ๊ฐ€์ง€๊ณ  firstI๊ฐ€ true์—ฌ์•ผ ํ•˜๋Š” ๊ฑด ๊ฐ™๊ณ , ๋‹ค์Œ ๋ฌธ์ž๋กœ๋Š” I๊ฐ€ ์™€์•ผ ํ•œ๋‹ค. ๋˜ํ•œ check์˜ ํ˜„์žฌ ๋งˆ์ง€๋ง‰ ๋ฌธ์ž๊ฐ€ O์—ฌ์•ผ ํ•œ๋‹ค.

ํ˜น์‹œ ๋ชจ๋ฅผ ๋ณดํ—˜์œผ๋กœ check๊ฐ€ ๋น„์–ด์žˆ์ง€ ์•Š์•„์•ผ ํ•˜๋Š” ์กฐ๊ฑด๋„ ๊ฐ™์ด ์ถ”๊ฐ€ํ•˜์ž.

์ด๋ฅผ ์ฝ”๋“œ๋กœ ๋‚˜ํƒ€๋‚ด ๋ณผ๊นŒ?

else if (check.isNotEmpty() && firstI && string[i] == 'I' && check.last() == 'O')

 

<์กฐ๊ฑด 3>

์กฐ๊ฑด 1, 2๋ฅผ ๋งŒ์กฑํ•˜์ง€ ๋ชปํ•˜๋ฉด ์ด์ œ ์กฐ๊ฑด 3์œผ๋กœ ๋„˜์–ด์™€์•ผ ํ•œ๋‹ค.

์กฐ๊ฑด 3์—๋Š” ์‚ฌ์ง„ 1-1์— I๊ฐ€ ์—ฐ์†ํ•ด์„œ ๋‚˜ํƒ€๋‚ฌ์„ ๋•Œ์ฒ˜๋Ÿผ check๋ฅผ clear ์‹œ์ผœ ์ค˜์•ผ ํ•œ๋‹ค.

๋˜ํ•œ I๊ฐ€ ์—ฐ์†ํ•ด์„œ ๋‚˜ํƒ€๋‚˜๋Š” ๊ฒฝ์šฐ๋„ ์žˆ๊ณ , O๊ฐ€ ์—ฐ์†ํ•ด์„œ ๋‚˜ํƒ€๋‚  ์ˆ˜๋„ ์žˆ์„ ๊ฒƒ์ด๋‹ค.

๋งŒ์•ฝ I๊ฐ€ ์—ฐ์†ํ•ด์„œ ๋‚˜ํƒ€๋‚œ๋‹ค๋ฉด firstI๋ฅผ true๋กœ ๊ณ„์† ์‚ด๋ ค๋†”๋„ ์ƒ๊ด€์—†์ง€๋งŒ, ๋งŒ์•ฝ O๊ฐ€ ์—ฐ์†ํ•ด์„œ ๋‚˜ํƒ€๋‚œ๋‹ค๋ฉด firstI๋ฅผ false๋กœ ๋ณ€๊ฒฝํ•ด์•ผ ํ•œ๋‹ค.

๋˜ํ•œ ์ด๋ฏธ ์—ฐ์†๋œ ๊ฐ’์ด ๋“ค์–ด๊ฐ€ ioCntList์— ๊ฐ’์ด ๋“ค์–ด๊ฐ„ ๊ฒฝ์šฐ์—๋Š” ๋‹ค์Œ index์— ๊ฐ’์ด ๋“ค์–ด๊ฐˆ ์ˆ˜ ์žˆ๋„๋ก ์ฒ˜๋ฆฌํ•ด์ฃผ์–ด์•ผ ํ•œ๋‹ค.

else {
    check.clear()
    if (string[i] != 'I') firstI = false
    if (ioCntList[ioCntIndex] != 0) ioCntList++
}

 

 

<์กฐ๊ฑด 4>

์กฐ๊ฑด 4๋Š” ์ƒ์‹œ๋กœ ํ™•์ธํ•ด์•ผ ํ•˜๋Š” ์กฐ๊ฑด์ด๋‹ค.

check๊ฐ€ OI์ธ์ง€ ํ™•์ธํ•ด ์ค˜์•ผ ํ•œ๋‹ค. ๋งŒ์•ฝ ์กฐ๊ฑด์„ ๋งŒ์กฑํ•˜๋ฉด check๋ฅผ clear ์‹œ์ผœ์ฃผ๊ณ , ํ˜„์žฌ ์—ฐ์†๋œ OI์˜ ๊ฐœ์ˆ˜๋ฅผ ์ €์žฅํ•˜๋Š” ioCntList๋ฅผ ๋Š˜๋ ค ์ค€๋‹ค.

if (check.toString() == "OI") {
    check.clear()
    ioCntList[ioCntIndex]++
}

์œ„ ์กฐ๊ฑด 4๊ฐœ๋ฅผ ์ด์šฉํ•ด ์ฝ”๋“œ๋กœ ๊ตฌํ˜„ํ•ด ๋ณด์ž.

 

 

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

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

fun main() = with(BufferedReader(InputStreamReader(System.`in`))) {
    val oCnt = readLine().toInt()
    val stringLength = readLine().toInt()
    val string = readLine()

    val checkString = StringBuilder()
    for (i in 1 .. oCnt * 2 + 1) {
        checkString.append(
            if (i % 2 == 0) "O"
            else "I"
        )
    }


    val check = StringBuilder()     // ํ˜„์žฌ ๋ฌธ์ž์—ด์„ ์ง์ ‘ ๋ฐ›์œผ๋ฉด์„œ ์ฒดํฌํ•จ.
    val ioCntList = MutableList(stringLength) { 0 }     // OI๊ฐ€ ์–ผ๋งˆ๋‚˜ ์—ฐ์†๋˜์–ด์„œ ๋‚˜ํƒ€๋‚˜๋Š”์ง€ ํ™•์ธ.
    var ioCntIndex = 0  // ioCntList์— ๊ฐ’์ด ์ถ”๊ฐ€๋  index
    var firstI = false  // OI๋ฅผ ์ฒดํฌํ•˜๊ธฐ ์ „์— ์ฒซ ๋ฒˆ์งธ์— I๊ฐ€ ์žˆ๋Š”์ง€ ํ™•์ธ.
    for (i in 0 until stringLength) {
        if (!firstI && string[i] == 'I') firstI = true

        if (firstI && string[i] == 'O' && check.isEmpty()) check.append("O")
        else if (check.isNotEmpty() && firstI && string[i] == 'I' && check.last() == 'O') check.append("I")
        else {
            check.clear()
            if (string[i] != 'I') firstI = false
            if (ioCntList[ioCntIndex] != 0) ioCntIndex++
        }

        if (check.toString() == "OI") {
            check.clear()
            ioCntList[ioCntIndex]++
        }
    }

    var res = 0
    for (i in 0 until ioCntList.size) {
        if (ioCntList[i] == 0) break

        if (ioCntList[i] >= oCnt)
            res += ioCntList[i] - (oCnt - 1)
    }

    println(res)
}

 

๋ฌธ์ œ ํ’€์ด

์ฒ˜์Œ์— ์ž…๋ ฅ๋œ O์˜ ๊ฐœ์ˆ˜(oCnt)์— ๋งž๊ฒŒ IOI ๋ฌธ์ž์—ด์„ ์ƒ์„ฑํ•œ๋‹ค.

๊ทธ๋‹ค์Œ ์ž…๋ ฅ๋ฐ›์€ ๋ฌธ์ž์—ด์„ ๋Œ๋ฉด์„œ OI๊ฐ€ ์—ฐ์†๋˜๋Š”์ง€ ํ™•์ธํ•œ๋‹ค.

์กฐ๊ฑด์„ ํ™•์ธํ•˜๊ธฐ ์ „์— ๋จผ์ € firstI๋ฅผ ๋ณ€๊ฒฝํ•ด์ค˜์•ผ ํ•œ๋‹ค. I๋กœ ์‹œ์ž‘ํ•˜๋Š” ์ˆœ๊ฐ„ firstI๋ฅผ true๋กœ ๋ฐ”๊ฟ”์ค€๋‹ค.

 

์กฐ๊ฑด 1์„ ํ†ตํ•ด check์— O๋ฅผ ๋„ฃ์–ด ์ฃผ๊ณ , ์กฐ๊ฑด 2๋ฅผ ํ†ตํ•ด I๋ฅผ ๋„ฃ์–ด ์ค€๋‹ค.

์กฐ๊ฑด 3์—์„œ๋Š” ์—ฐ์†๋œ OI๊ฐ€ ๋Š๊ฒผ์„ ๋•Œ ๋กœ์ง์„ ์ฒ˜๋ฆฌํ•œ๋‹ค.

์กฐ๊ฑด 4๋Š” ์ƒ์‹œ๋กœ ํ™•์ธํ•˜๋ฉฐ, chek๊ฐ€ OI๋ผ๋ฉด check๋ฅผ clear ์‹œํ‚ค๊ณ  ioCntList๋ฅผ ๋Š˜๋ ค ์ค€๋‹ค.

 

 

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

์ฒ˜์Œ์—๋Š” ๋ฐ˜๋ณต์— subString์„ ์ด์šฉํ•ด ํ’€์—ˆ์ง€๋งŒ ์‹œ๊ฐ„ ์ดˆ๊ณผ๋กœ 100์ ์„ ๋งž์ง€ ๋ชปํ–ˆ๋‹ค.

๊ทธ๋ž˜์„œ ๋‹ค๋ฅธ ์‚ฌ๋žŒ์˜ ๋ฌธ์ œ ์ ‘๊ทผ๋ฒ•์„ ๊ฐ„๋žตํ•˜๊ฒŒ ์ฐพ์•„๋ด์„œ OI๊ฐ€ ๋ฐ˜๋ณต๋œ๋‹ค๋Š” ๊ฒƒ์„ ์•Œ๊ฒŒ ๋˜๊ณ  ๊ทธ์— ๋งž๊ฒŒ ๋ฐ˜๋ณต๋œ OI์˜ ๊ฐœ์ˆ˜๋ฅผ ๊ตฌํ•ด ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ์—ˆ๋‹ค.

728x90