import java.io.*
import java.lang.Math.pow
import java.util.*
import kotlin.math.abs
import kotlin.math.pow
import kotlin.math.sqrt

fun main() {
    val br = BufferedReader(InputStreamReader(System.`in`))
    val bw = BufferedWriter(OutputStreamWriter(System.out))

    val testCase = br.readLine().toInt()
    for ( i in 1..testCase) {
        val st = StringTokenizer(br.readLine())
        val x1 = st.nextToken().toInt()
        val y1 = st.nextToken().toInt()
        val r1 = st.nextToken().toInt()
        val x2 = st.nextToken().toInt()
        val y2 = st.nextToken().toInt()
        val r2 = st.nextToken().toInt()

        val distance = sqrt((x2 - x1).toDouble().pow(2.0) + (y2 - y1).toDouble().pow(2.0))

        when {
            x1 == x2 && y1 == y2 && r1 == r2 -> bw.write("-1\n") //두 원 100%겹침
            distance == r1 + r2.toDouble() || abs(r1 - r2).toDouble() == distance -> bw.write("1\n") //두 원 외접or내접
            distance > r1 + r2 || x1 == x2 && y1 == y2 && r1 != r2 || distance < abs((r2 - r1)) -> bw.write("0\n") //두 원이 떨어져있거나 접하지 않으며 안 만남
            else -> bw.write("2\n") //나머지
        }
        bw.flush()
    }
    bw.close()
}
//이석원은 조규현과 백승환에게 상대편 마린(류재명)의 위치를 계산하라는 명령을 내렸다. 조규현과 백승환은 각각 자신의 터렛 위치에서 현재 적까지의 거리를 계산했다.
//
//조규현의 좌표 (x1, y1)와 백승환의 좌표 (x2, y2)가 주어지고, 조규현이 계산한 류재명과의 거리 r1과 백승환이 계산한 류재명과의 거리 r2가 주어졌을 때, 류재명이 있을 수 있는 좌표의 수를 출력하는 프로그램을 작성하시오.

 

단계10(수학2) 마지막문제 1002번이에요

코드만 보면 간단해요.

이 문제는 원의 관한 지식이 있어야 풀 수 있는 문제라서... 코드 구현이랑은 거리가

좀 먼 느낌... 수학적인 것에 시간을 더 쏟은 느낌이네요

수학에 관한 문제를 풀다보니 구현능력은 안 늘고 수학적인 지식만 늘어나는 느낌..

그래서 이제부터 저는 가능한 구현에 관한 문제만 풀려고 해요

수학문제를 풀려고 코딩하는게 아니니깐!

반응형
import java.io.*
import java.util.*
import kotlin.math.round
import kotlin.math.sqrt

fun main() {
    val br = BufferedReader(InputStreamReader(System.`in`))
    val bw = BufferedWriter(OutputStreamWriter(System.out))

    //테스트케이스
    val testCase = br.readLine().toInt()

    for ( i in 1..testCase ) {
        //X값과 Y값 구분
        val xy = StringTokenizer(br.readLine())
        val x = xy.nextToken().toInt()
        val y = xy.nextToken().toInt()
        //X값과 Y값을 뺀 값
        val yMinusX = y - x
        //yMinusX의 제곱근
        var zeGop = sqrt(yMinusX.toDouble())
        //yMinusX 제곱근을 반올림한 값
        var roundUp = round(zeGop)
        //y-x가 3이하면 그냥 출력
        //y-x가 4 이상부터는 제곱근이 제곱근의 반올림값보다 크면 제곱근 * 2
        //y-x가 4 이상부터는 제곱근이 제곱근의 반올림값보다 작으면 제곱근 * 2 - 1
        when {
            yMinusX <= 3 -> bw.write("$yMinusX\n")
            zeGop > roundUp -> bw.write("${roundUp.toInt() * 2}\n")
            zeGop <= roundUp -> bw.write("${roundUp.toInt() * 2 - 1}\n")
        }
        bw.flush()
    }
    bw.close()
}

단계9(수학1) 마지막문제 1011번이에요

일단 문제이해하는데에도 굉장히 오래걸렸어요

처음에 볼때는 그냥 Y 와 X를 뺀 값에서 반정도 날아가면 되지 않나 생각했는데

도착전에는 이동거리가 1이어야 하기 때문에 이 때문에 꼬인...

그냥 차근차근 표를 만들어서 보니 규칙이 나왔어요

또 제곱근에 힌트가 있다는 것도 접하고... 다음은 얼마나 어려울지 흑

반응형
import java.io.*
import kotlin.math.abs

fun main() {
    val br = BufferedReader(InputStreamReader(System.`in`))
    val bw = BufferedWriter(OutputStreamWriter(System.out))
    val n = br.readLine().toInt()

    bw.write("${d(n)}")
    bw.flush()
    bw.close()
}

fun d(n: Int): Int {
    var cnt = 0
    var arr = IntArray(3)
    var w = 0
    for ( i in 1..n) {
        if (i in 1..99)  cnt = i
        else if ( i == 1000 ) break
        else {
            w = 0
            var temp = i
            while (temp > 0) {
                arr[w] = temp % 10
                temp /= 10
                w++
            }
            if (arr[0] - arr[1] == arr[1] - arr[2]) cnt++
        }

    }
    return cnt
}
//어떤 양의 정수 X의 자리수가 등차수열을 이룬다면, 그 수를 한수라고 한다.
// 등차수열은 연속된 두 개의 수의 차이가 일정한 수열을 말한다. N이 주어졌을 때, 1보다 크거나 같고, N보다 작거나 같은 한수의 개수를 출력하는 프로그램을 작성하시오.

단계7(함수) 마지막문제 1065번입니다

엄청 어려웠네요... 문제 이해하는데도 시간이 걸렸고

또 완벽하게 저 혼자 푼게아니고 도움을 받은거라...

수학재능이 부족한것인지 구현능력이 부족한건지

어려워~

반응형
import java.io.*
import java.util.*

fun main() {
    val br = BufferedReader(InputStreamReader(System.`in`))
    val bw = BufferedWriter(OutputStreamWriter(System.out))

    val arr = IntArray(1_001)
    var testCase = br.readLine().toInt()

    var sum: Double
    var eveRage: Double
    var sumCnt: Double
    var d: Double
    for ( i in 1..testCase) {
        sum = 0.0
        eveRage = 0.0
        sumCnt = 0.0
        d = 0.0
        val str2 = StringTokenizer(br.readLine())

        //입력값 배열 저장
        var i:Int = 0
        while (str2.hasMoreTokens()) {
            arr[i] = str2.nextToken().toInt()
            i++
        }

        //평균구하기
        for ( i in 1..arr[0]) {
            sum += arr[i]
            eveRage = sum / arr[0]
        }

        //학생 비율
        for ( i in 1..arr[0]) {
            if ( arr[i] > eveRage)
                sumCnt += 1
        }
        d = sumCnt / arr[0] * 100
        bw.write("%.3f".format(d)+"%\n")//소수점 3자리
        bw.flush()
    }
    bw.close()
}

단계6(배열) 마지막문제인 4344번입니다.

코드가 엄~청 길죠?? 분명 단축하는 방법은 있을텐데

아직 배우는 중이라서 공부를 더 하고 코드 다이어트 좀 해봐야겠어요

갈 수록 어려워지네요... 포기하지말아야지


추가-

 

import java.io.*
import java.util.*

fun main() {
    val br = BufferedReader(InputStreamReader(System.`in`))
    val bw = BufferedWriter(OutputStreamWriter(System.out))

    val arr = IntArray(1_001)
    var arr2: List<Int>
    var arr3: List<Int>
    var testCase = br.readLine().toInt()

    var aveRage = 0.0
    var sumCnt: Double
    var d: Double
    for ( i in 0 until testCase) {
        val str2 = StringTokenizer(br.readLine())

        //입력값 배열 저장
        var i:Int = 0
        while (str2.hasMoreTokens()) {
            arr[i] = str2.nextToken().toInt()
            i++
        }
        arr2 = arr.slice(listOf(0)) //맨 앞 요소만 가져오기
        arr3 = arr.take(arr2[0]+1).drop(1)//학생들 점수만 가져오기
        
        //평균구하기
        aveRage = arr3.average()
        
        //학생 비율
        sumCnt = arr3.count { it > aveRage}.toDouble()
        d = sumCnt / arr3.count() * 100
        bw.write("%.3f".format(d)+"%\n")//소수점 3자리
        bw.flush()
    }
    bw.close()
}

이번에는 가능한 반복문을 없애고 라이브러리 활용위주로 해보았는데

채점시간이 더 오래걸리네요

작은 데이터 색에는 반목문이 더 빠른 것 같아요. 아닌가?

반응형
import java.io.*
import java.util.*

fun main() {
    val br = BufferedReader(InputStreamReader(System.`in`))
    val bw = BufferedWriter(OutputStreamWriter(System.out))
    val str = br.readLine()
    val stx = StringTokenizer(str)

    var num = stx.nextToken().toInt()

    var a = 0
    var b = 0
    var temp =  0
    var cnt = 0
    var c= num

    while (true) {

        a = num / 10
        b = num % 10
        temp = (a + b) % 10
        num =  b * 10 + temp
        cnt++
        if(c == num ) break
    }
    bw.write("$cnt")
    bw.flush()
    bw.close()
}

단계4(while문) 마지막문제에요

어려웠어요... 한 몇시간 공책가지고 풀어도 안돼서 결국...

인터넷에 검색해버리고 말았어요. 하지만 이제는 알았어요 규칙을 ㅜ

이제는 제가 생각하고 있는 것만 생각하지말고 또 다른

규칙에 대해 좀더 깊게 생각해봐야겠어요

반응형
import java.io.*
import java.util.*

fun main() {
        val br = BufferedReader(InputStreamReader(System.`in`))
        val bw = BufferedWriter(OutputStreamWriter(System.out))
        var str = br.readLine() //콘솔창 한 줄을 받음(공백상관)
        var stk = StringTokenizer(str) //공백을 기준으로 숫자를 나눔
        val n = stk.nextToken().toInt() //수열의 갯수 몇개받을 것인지
        val m = stk.nextToken().toInt() // 판단기준 숫자

        //여기서 부터 수열의 숫자들을 받음
        str = br.readLine()
        stk = StringTokenizer(str)

        if (stk.hasMoreTokens()) {
            for(i in 1..n) {
                val num = stk.nextToken().toInt()
                if (num < m)
                    bw.write("$num ")
            }
        }
    bw.flush()
    bw.close()
}

백준 단계3(for문) 마지막 문제에요

문제를 보면 배열로 하면 간단하겠지만 출제자의 의도는

for과 if만을 사용하길 원했기에 한번 이렇게 해봤어요.

저는 scanner 만 사용했었는데 BufferedReader 라는 쪽을 알고된후에

입출력에 대해 아예 새롭게 배우고 있어요

아직도 완벽하게 습득하진 못했어요 계속 자주 써봐야겠어요

근데 시간면에서 1등이네요... 신기..

반응형
import java.util.*

fun main() {
    val scanner = Scanner(System.`in`)

    var a = scanner.nextInt()
    var b = scanner.nextInt()
    var c = scanner.nextInt()

    when {
        a > b && a > c && b > c -> print(b)//a가 가장 크고 b가 2번째 일때
        a > b && a > c && b < c -> print(c)//a가 가장 크고 c가 2번째 일때
        b > a && b > c && a > c -> print(a)//b가 가장 크고 a가 2번째 일때
        b > a && b > c && a < c -> print(c)//b가 가장 크고 c가 2번째 일때
        c > a && c > b && a > b -> print(a)//c가 가장 크고 a가 2번째 일때
        c > a && c > b && a < b -> print(b)//c가 가장 크고 b가 2번째 일때
        a == b -> print(a) //숫자 2개가 같다는건 남은 1개는 작거나 크다는 얘기
        b == c -> print(b)
        a == c -> print(c)
    }
}

단계 2(if문) 마지막문제에요

when이라는 조건문이 있어서 코드가 깔끔해요

배열을 사용하면 더 간단할텐데

조건문만 써야해서 머리를 많이 썼네요

답을 알아내면 엄청 쉬운데 그전에는 진짜 세상에 아무것도 없는 것을

만들어내는 느낌이랄까?? 엄청나요

반응형
import java.util.*

fun main() {
    val scanner = Scanner(System.`in`)

    val a = scanner.nextInt()
    val b = scanner.nextInt()

    println(a * (b % 10))
    println(a * (b % 100 / 10))
    println(a * (b / 100))
    print(a*b)
}

단계 1(입출력과 사칙연산) 마지막문제라서 올려보아요

앞으로도 각 단계 마지막문제를 '풀 수' 있다면

쉽든 어렵든 올려볼려고 해요

반응형

+ Recent posts