경험의 기록

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

 

1193번: 분수찾기

첫째 줄에 X(1 ≤ X ≤ 10,000,000)가 주어진다.

www.acmicpc.net

 

 

풀이

// [백준] 1193. 분수찾기 (Kotlin)

import java.util.*

fun main() = with(Scanner(System.`in`)){
    val x = nextInt()
    var sum = 1 // 분자 분모 합
    var tmp = 0 // 같은 분자분모 합 레벨에서 가장 뒤의 순서

    // 분자 분모 합 구하기
    while(tmp < x){
        tmp += sum
        sum++
    }

    // 합이 짝수
    if(sum%2 == 0){
        val molecule = (tmp - x + 1)
        val denominator = sum - molecule
        println("$molecule/$denominator")
    }

    // 합이 홀수
    else{
        val denominator = (tmp - x + 1)
        val molecule = sum - denominator
        println("$molecule/$denominator")
    }
}

분수의 진행상황을 대각선으로 보았을 때

분자+분모 3,4,5,6 의 형태로 증가함을 확인할 수 있고

각자 같은 합 레벨에서 가장 뒤의 순번은 3,6,10,15 의 형태로 증가하는 것을 확인할 수 있다.

 

또한 레벨 내에서 레벨(분자+분모)이 짝수라면

앞 순번으로 갈수록 분자++, 분모-- 의 형태이고

 

홀수라면

앞 순번으로 갈수록 분자--, 분모++ 의 형태이다.

 

따라서 입력받은 값이 어느 레벨에 속하는지 찾아주고

그 레벨 내에서의 규칙에 따라 결과를 구할 수 있다.

 

반응형

공유하기

facebook twitter kakaoTalk kakaostory naver band
loading