벌써 심화1이네요
(사실 브실 문제는 금방풀죠..)
챕터 6부터 git에 올라가는 문제 형식을 변경했습니다.

기존
ChapterX.kt 에 문제가 순서대로 나열
변경
chapterX 폴더안에 s<문제번호>.kt 파일 생성


25083 새싹

간단한 문자열 출력 문제입니다. ""안에서 \을 이용하여 원하는 문자를 출력하는것이 중요합니다.

// https://www.acmicpc.net/problem/25083
fun main() {
    StringBuilder().apply {
        append("         ,r'\"7\n")
        append("r`-_   ,'  ,/\n")
        append(" \\. \". L_r'\n")
        append("   `~\\/\n")
        append("      |\n")
        append("      |\n")
    }.also {
        println(it.toString())
    }
}

3003 킹, 퀸, 룩, 비숍, 나이트, 폰

import java.io.BufferedReader
import java.io.InputStreamReader

// https://www.acmicpc.net/problem/3003
fun main() {
    val br = BufferedReader(InputStreamReader(System.`in`))
    val goal = listOf(1,1,2,2,2,8)
    val list = br.readLine().split(" ").mapIndexed { index, i ->
        goal[index] - i.toInt()
    }
    println(list.joinToString(" "))

}

2444 별 찍기 - 7

중앙기점으로 똑같다는점에서 리버스만 시켜주면 끝

import java.io.BufferedReader
import java.io.InputStreamReader

// https://www.acmicpc.net/problem/2444
fun main() {
    val br = BufferedReader(InputStreamReader(System.`in`))
    val n = br.readLine().toInt()
    val list = (1 until n).map { i -> " ".repeat(n-i) + "*".repeat(2*i -1) }
    val result = mutableListOf<String>()
    result.addAll(list)
    result.add("*".repeat(2*n-1))
    result.addAll(list.reversed())
    println(result.joinToString("\n"))
}

10812 바구니 순서 바꾸기

LinkedList를 이용하면 보다 손쉽게 풀 수 있습니다.(POP)

import java.io.BufferedReader
import java.io.InputStreamReader
import java.util.LinkedList

// https://www.acmicpc.net/problem/10812
fun main() {
    val br = BufferedReader(InputStreamReader(System.`in`))
    val (n, m) = br.readLine().split(" ").map { it.toInt() }
    val baguni = (1..n).toMutableList()

    for (idx in 1..m) {
        val (i, j, k) = br.readLine().split(" ").map { it.toInt() - 1 }
        val find = LinkedList(baguni.slice(i..j))
        for (cnt in 1 ..k - i) {
            find.add(find.pop())
        }

        find.forEachIndexed { index, value ->
            baguni[index + i] = value
        }
    }
    println(baguni.joinToString(" "))
}

10988 팰린드롬인지 확인하기

길이가 1일때 예외생각해주기

import java.io.BufferedReader
import java.io.InputStreamReader

// https://www.acmicpc.net/problem/10988
fun main() {
    val br = BufferedReader(InputStreamReader(System.`in`))
    val word = br.readLine().toString()
    val size = word.length
    if (size == 1) {
        println(1)
    }else {
        for (i in 0.. size/2) {
            if (word[i] != word[size-1-i]) {
                println(0)
                return
            }
        }
        println(1)
    }

}

1157 단어공부

key가 있는지 잘 체크해보기

// https://www.acmicpc.net/problem/1157
fun main() {
   val br = BufferedReader(InputStreamReader(System.`in`))
   val word = br.readLine().toString().uppercase().toCharArray()
   val result = mutableMapOf<Char,Int>()
   for (c in word) {
       if (result.containsKey(c)) {
           result[c] = result[c]!! + 1
       } else {
           result[c] = 1
       }
   }
   val maxValue = result.map { it.value }.toSet().max()
   val answer = result.filterValues { it == maxValue }
   if (answer.size == 1) {
       println(answer.keys.joinToString(""))
   } else {
       println("?")
   }
}

4344 평균은 넘겠지

format 기능을 잘 활용하자~

import java.io.BufferedReader
import java.io.InputStreamReader
import kotlin.math.max

// https://www.acmicpc.net/problem/4344
fun main() {
   val br = BufferedReader(InputStreamReader(System.`in`))
   var c = br.readLine().toInt()
   while (c != 0) {
       val line = br.readLine().split(" ").map { it.toInt() }
       val n = line[0]
       val numbers = line.slice(1..n)

       val avg = numbers.sum().toFloat() / n

       val avgOvers = numbers.filter { it.toFloat() > avg }

       println(String.format("%2.3f%%",(avgOvers.size.toFloat() / n) * 100))
       c --
   }

}

2941 크로아티아 알파벳

dz= 와 z= 두 개가 비슷하므로 dz= 먼저 비교해주기

import java.io.BufferedReader
import java.io.InputStreamReader

// https://www.acmicpc.net/problem/2941
fun main() {
   val matcher = mapOf(
       "dz=" to 1,
       "c=" to 2,
       "c-" to 3,
       "d-" to 4,
       "lj" to 5,
       "nj" to 6,
       "s=" to 7,
       "z=" to 8
   )
   val bf = BufferedReader(InputStreamReader(System.`in`))
   var read = bf.readLine().toString()
   matcher.forEach {
       read = read.replace(it.key,it.value.toString())
   }
   println(read.length)
}

1316 그룹 단어 체커 성공

마지막으로 만난 idx 를 저장하여 확인해보자,
그리고 길이가 1,2인경우는 무조건 맞는 case이니 바로 패스해주자

import java.io.BufferedReader
import java.io.InputStreamReader

// https://www.acmicpc.net/problem/1316
fun main() {
    val br = BufferedReader(InputStreamReader(System.`in`))
    var n = br.readLine().toInt()
    var cnt = 0
    val aCode = 'a'.code
    while (n!=0){
        n--
        val word = br.readLine().toString()
        if (word.length == 1 || word.length == 2) {
            //길이가 1 또는 2인 경우 무조건 만족
            cnt +=1
        } else {
            val lastIdxAlphabet = IntArray(26) { -1 }

            var pass = false
            for (i in word.indices) {
                val idx = word[i].code -aCode
                //처음 넣는 경우
                if (lastIdxAlphabet[idx] == -1) {
                    lastIdxAlphabet[idx] = i
                } else{
                    //값이 있는 경우 +1 과 idx가 같지 않다면 연속이 아님
                    if (lastIdxAlphabet[idx] + 1 != i) {
                        pass = true
                        break
                    } else {
                        lastIdxAlphabet[idx] = i
                    }
                }
            }
            if (!pass) {
                cnt +=1
            }
        }
    }
    println(cnt)
}

25206 너의 평점은

평점 변환을 잘해주는게 포인트~

import java.io.BufferedReader
import java.io.InputStreamReader

// https://www.acmicpc.net/problem/25206
fun main() {
    val br = BufferedReader(InputStreamReader(System.`in`))
    var cnt = 0.0f
    var sum = 0.0f
    for (idx in 1.. 20) {
        val (_,b,c) = br.readLine().split(" ")
        if (c != "P") {
            val st = b.toFloat()
            cnt += st
            if (c != "F") {
                val score = c
                    .replace("+", "5")
                    .replace("A", "4.")
                    .replace("B", "3.")
                    .replace("C", "2.")
                    .replace("D", "1.").toFloat()
                sum += (score * st)
            }
        }
    }
    println(String.format("%1.6f",sum/cnt))

}
profile
안녕하세요. 원딱입니다.

0개의 댓글

Powered by GraphCDN, the GraphQL CDN