Kotlin/Algorithm Problems

<백준> 24.05.13에 푼 문제들

re트 2024. 5. 13. 11:58
728x90

1. 비밀번호 발음하기(Silver 5)

[백준]

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

[깃허브]

 

ForCodeKata/baekjoon 문제집/비밀번호 발음하기 at main · heesoo-park/ForCodeKata

Contribute to heesoo-park/ForCodeKata development by creating an account on GitHub.

github.com

제출 결과

작성한 코드는 다음과 같다.

import java.io.BufferedWriter
import java.io.OutputStreamWriter


fun main() = with(System.`in`.bufferedReader()) {
    val bw = BufferedWriter(OutputStreamWriter(System.out))
    val vowel = listOf('a', 'e', 'i', 'o', 'u')

    while (true) {
        val input = readln()
        if (input == "end") break

        var cntOfVowel = 0
        var isFinish = false
        for (i in input.indices) {
            if (input[i] in vowel) cntOfVowel += 1

            if (i > 1) {
                if (input[i] in vowel && input[i - 1] in vowel && input[i - 2] in vowel ||
                    input[i] !in vowel && input[i - 1] !in vowel && input[i - 2] !in vowel) {
                    bw.write("<${input}> is not acceptable.\n")
                    isFinish = true
                    break
                }
            }

            if (i > 0 && input[i] == input[i - 1]) {
                if (input[i] != 'e' && input[i] != 'o') {
                    bw.write("<${input}> is not acceptable.\n")
                    isFinish = true
                    break
                }
            }
        }

        if (cntOfVowel == 0 && !isFinish) {
            bw.write("<${input}> is not acceptable.\n")
            isFinish = true
        }

        if (!isFinish) bw.write("<${input}> is acceptable.\n")
    }

    bw.flush()
    bw.close()
}

 

2. 임스와 함께하는 미니게임(Silver 5)

[백준]

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

[깃허브]

 

ForCodeKata/baekjoon 문제집/임스와 함께하는 미니게임 at main · heesoo-park/ForCodeKata

Contribute to heesoo-park/ForCodeKata development by creating an account on GitHub.

github.com

제출 결과

작성한 코드는 다음과 같다.

import java.io.BufferedWriter
import java.io.OutputStreamWriter


fun main() = with(System.`in`.bufferedReader()) {
    val bw = BufferedWriter(OutputStreamWriter(System.out))
    val (n, c) = readln().split(' ')
    val requestList = mutableListOf<String>()

    repeat(n.toInt()) {
        requestList.add(readln())
    }

    val people = requestList.groupingBy { it }.eachCount().keys

    when (c) {
        "Y" -> bw.write("${people.size}")
        "F" -> bw.write("${people.size / 2}")
        "O" -> bw.write("${people.size / 3}")
    }

    bw.flush()
    bw.close()
}

 

3. 쿠키의 신체 측정(Silver 4)

[백준]

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

[깃허브]

 

ForCodeKata/baekjoon 문제집/쿠키의 신체 측정 at main · heesoo-park/ForCodeKata

Contribute to heesoo-park/ForCodeKata development by creating an account on GitHub.

github.com

제출 결과

작성한 코드는 다음과 같다.

import java.io.BufferedWriter
import java.io.OutputStreamWriter

private lateinit var square: Array<CharArray>

fun main() = with(System.`in`.bufferedReader()) {
    val bw = BufferedWriter(OutputStreamWriter(System.out))
    val size = readln().toInt()
    square = Array(size + 1) { CharArray(size + 1) }

    repeat(size) { r ->
        val line = readln()
        for (c in 1..size) {
            square[r + 1][c] = line[c - 1]
        }
    }

    val heart = findHeart(size)
    bw.write("${heart[0]} ${heart[1]}\n")

    var leftArm = 0
    for (i in heart[1] - 1 downTo 1) {
        if (square[heart[0]][i] == '*') leftArm++
        else break
    }
    bw.write("$leftArm ")

    var rightArm = 0
    for (i in heart[1] + 1..size) {
        if (square[heart[0]][i] == '*') rightArm++
        else break
    }
    bw.write("$rightArm ")

    var waist = 0
    var waistEnd = heart[0]
    for (i in heart[0] + 1..size) {
        if (square[i][heart[1]] == '*') {
            waistEnd++
            waist++
        }
        else break
    }
    bw.write("$waist ")

    var leftLeg = 0
    for (i in waistEnd + 1..size) {
        if (square[i][heart[1] - 1] == '*') leftLeg++
        else break
    }
    bw.write("$leftLeg ")

    var rightLeg = 0
    for (i in waistEnd + 1..size) {
        if (square[i][heart[1] + 1] == '*') rightLeg++
        else break
    }
    bw.write("$rightLeg\n")

    bw.flush()
    bw.close()
}

fun findHeart(size: Int): List<Int> {
    for (i in 1..size) {
        for (j in 1..size) {
            if (square[i - 1][j] == '*' && square[i][j - 1] == '*'
                && square[i + 1][j] == '*' && square[i][j + 1] == '*') {
                return listOf(i, j)
            }
        }
    }

    return listOf(size, size)
}
반응형