요약

  • 구름톤 (코테를 4주간 풀어내는 행사) 를 참여하면서 1주차 화요일까지 푼 문제들과 학습포인트를 정리해보려고 합니다.

월요일 문제

  • 월요일 문제는 아주 간단했습니다. 두개의 숫자를 입력받아 소수점연산을 해준 뒤 출력은 정수형으로 처리하면 되는 문제였습니다.
  • 여기서 두개의 숫자는 한줄에 들어오는데요, 예를들어 "10 30" 혹은 "77 22" 같은 형태로 입력됩니다.
  • 따라서 이 문제를 풀기 위한 구현사항을 미분해보면 아래와 같습니다
    • 문자열 한줄을 입력받아 숫자 두개로 파싱하는 구현
    • 타입캐스팅과 프로모션 그리고 묵시적 형변환과 명시적 형변환에 대해 이해하고 사용할수 있는가
  • 위 두가지 사항이 포인트였습니다.
  • 아래는 제가 코틀린 언어로 작성한 풀이입니다
fun main0814(args: Array<String>) {
    val (w, r) = readLine()!!
        .split(" ")
        .map { it.toDouble() }
    print((w * ((1.0000 + (r / 30.0000)))).toInt())
}

화요일 문제

  • 화요일 문제는 시간에 관련된 carry 처리에 대한 부분입니다.
  • B 모 저지사이트가 떠오르는 입력 형태의 문제였습니다.
  • 입력값만 잘 받았다면 풀기에 그다지 어렵지는 않았습니다. 하지만 전 틀렸죠,,
  • 왜 틀린지 설명하기 위해 틀린코드를 잠깐 가져와보면
print(String.format("%02d %02d",answerHour, answerMin))
  • 문제의 요구사항중에서 시/분 출력을 0 0 으로 해야하는데, 저의 틀린 코드로는 00 00이 되는 문제가 있었습니다.
  • 해당 이슈를 해결하고 제출에 성공한 코드는 아래와 같습니다

fun main0815(args: Array<String>) {
    val count = readLine()!!
        .toInt()
    val (hour, min) = readLine()!!
        .split(" ")
        .map { it.toInt() }
    val numberList = mutableListOf<Int>()
    for (i in 0 until count) {
        numberList.add(readLine()!!.toInt())
    }
    val totalMinute = numberList.sum()
    val answerHour = calHour(hour, totalMinute, min).toString()
    val answerMin = calMin(totalMinute, min).toString()
    print("$answerHour $answerMin")
}

fun calHour(hour: Int, totalMinute: Int, min: Int): Int {
    return (hour + carryMiMin(totalMinute, min)) % 24
}

fun calMin(totalMinute: Int, min: Int): Int {
    return (totalMinute + min) % 60
}

fun carryMiMin(totalMinute: Int, min: Int): Int {
    return (totalMinute + min) / 60
}
  • 불필요한 지역변수 선언도 많고 메서드명에 축약어를 많이 써서 상당히 죄책감이 드는 코드이지만 코테코드는 불량식품 느낌으로 짜도 된다는 변명으로 이만 줄이겠습니다.. ㅎ..

구름톤 컨테이너 주소