벌써 심화1이네요
(사실 브실 문제는 금방풀죠..)
챕터 6부터 git에 올라가는 문제 형식을 변경했습니다.
기존
ChapterX.kt 에 문제가 순서대로 나열
변경
chapterX 폴더안에 s<문제번호>.kt 파일 생성
간단한 문자열 출력 문제입니다. ""안에서 \을 이용하여 원하는 문자를 출력하는것이 중요합니다.
// 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())
}
}
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(" "))
}
중앙기점으로 똑같다는점에서 리버스만 시켜주면 끝
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"))
}
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(" "))
}
길이가 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)
}
}
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("?")
}
}
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 --
}
}
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)
}
마지막으로 만난 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)
}
평점 변환을 잘해주는게 포인트~
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))
}