[A&I Code Camp] Day47

Hood·2024년 11월 12일

A&I Code Camp

목록 보기
36/38
post-thumbnail

✍   Kotlin을 PS 문제 풀기

소속중인 A&I 동아리에서 코딩역량을 강화하고자
코딩캠프를 진행하며 작성한 포스트입니다.
해당 포스트는 kotlin을 기반으로 작성합니다.


구현

이번 주 주제는 구현입니다.
백준에 하루 한 문제를 풀어가며 작성할 것입니다.

1193번

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

이 문제는 위 분수 배열에서 지그재그로 번호를 부여할 때 내가 원하는 번호의 분수를 구하는 문제입니다.

Solve

  1. 입력을 받아줍니다.
  2. 위 배열의 규칙을 알아야 합니다.
    2-1. 첫 번째로 분자 분모의 합이 짝수, 홀수를 번갈아 갈때마다 열이 변합니다.
    2-2. 열의 순번의 끝을 더하면 3, 6, 10, 15 등등 1부터 열의 순번까지를 더한 수가 나옵니다.
    2-3 만약 홀수 열의 경우 첫 번째 분수에서 마지막 분수가 될수록 분자는 감소하고 분모는 증가합니다.
    반대의 경우 짝수분자는 증가하고 분모는 감소합니다.
  3. 그래서 열의 순번을 구해줄 tmp와 분자 분모의 합 sum 을 넣어준 뒤
    반복문을 통해 해당 숫자가 몇 번째 열에 있는지 구합니다.
  4. 열을 구했다면 수를 2로 나눠 만약 짝수toptmp(열의 순번) - x(내가 받은 숫자) + 1을 통해
    분자를 구해주고 bottom에는 sumtop을 빼주는 식으로 분모를 구합니다. 홀수는 반대로 구해줍니다.
    (1을 더해주는 이유는 분자 분모가 1/1부터 시작하기 때문입니다.)
  5. 이후 top/bottom을 불러 출력해줍니다.
import java.io.StreamTokenizer

fun main() = with(StreamTokenizer(System.`in`.bufferedReader())){
    fun nextInt() : Int { nextToken(); return nval.toInt() }

    val x = nextInt()
    var top = 0
    var bottom = 0

    //열의 순번
    var tmp = 0
    //분자 분모의 합
    var sum = 1

    while(tmp < x){
        tmp += sum
        sum++
    }

    if(sum % 2 == 0){
        top = tmp - x + 1
        bottom = sum - top
    } else {
        bottom = tmp - x + 1
        top = sum - bottom
    }

    println("$top/$bottom")
}

profile
달을 향해 쏴라, 빗나가도 별이 될 테니 👊

0개의 댓글