본문 바로가기
코딩테스트

[Python] 백준 1193번 - 분수찾기

by 박매트 2024. 6. 4.

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

 

 

나의 답

import sys

N = int(sys.stdin.readline())

cnt = 0
i = 1

while (True):
    cnt+=i
    if cnt>=N:
        break
    
    i+=1

start = i+N-cnt
end = i- start+1

if i %2 == 0:
    print(f"{start}/{end}")
else:
    print(f"{end}/{start}")

 

1 / 1 => 2의 합 : 1개

1 / 2 , 2/ 1 => 3의 합 : 2개

3 / 1, 2 / 2,  1 / 3 => 4의 합 : 3개

 

이런식으로 1, 2, 3의 덧셈으로 이루어진다고 생각을 했다.

같은 범위 내에 있는 숫자는 합이 N으로 같다.

 

그래서 해당 N이 1의 합(1) 의 범위인지, 2의 합(2~3)의 범위인지, 3(4~6)의 범위인 지 확인했다.

 

N이 만약 9라면, 4의 합 범위이며 4의 합 범위 중, 3번째 숫자 값이다.

 

이 때 범위 중 N번째 숫자 값은 start를 N으로 설정하였고, end는 (i+1)-start로 설정하였다.

start + end 는 => i+1의 합이기 때문이다.

 

i의 합 중, 짝수일 경우는 1/N부터 시작을 하고

i의 합 중, 홀수일 경우는 N/1부터 시작을 하기 때문이다. 

숫자를 바꿔서 출력한다..

 

다른 사람 답

num = int(input())
line = 1

while num > line:
    num -= line
    line += 1
    
# 짝수일경우
if line % 2 == 0:
    a = num
    b = line - num + 1
# 홀수일경우
elif line % 2 == 1:
    a = line - num + 1
    b = num

print(f'{a}/{b}')

 

살짝 비슷하면서 다르다..

훨씬 더 깔끔한 코드인 듯 하다

https://velog.io/@hwsa1004/%EB%B0%B1%EC%A4%80-1193%EB%B2%88-%EB%B6%84%EC%88%98%EC%B0%BE%EA%B8%B0-%ED%8C%8C%EC%9D%B4%EC%8D%AC-%ED%92%80%EC%9D%B4

 

[백준] 1193번 분수찾기 파이썬 풀이

죄금 으렵구만

velog.io

 

 

 

Kotlin 버전 답

import kotlin.math.abs

fun main() {
    val N = readLine()!!.toInt()

    var cnt = 0
    var i = 1

    while (true) {
        cnt += i
        if (cnt >= N) break
        i++
    }

    val start = i + N - cnt
    val end = i - start + 1

    if (i % 2 == 0) {
        println("$start/$end")
    } else {
        println("$end/$start")
    }
}

\

 

머리속으로는 계산이 안돼서.. 그림을 그렸다.