Breaking

2019년 1월 18일 금요일

Baekjoon 1193번 분수찾기

Baekjoon 1193 분수찾기

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


getNum=int(input())
number=1
totnum=0
while True:
    totnum=number*(number+1)/2
    if totnum >= getNum:
        break
    number += 1
    
sub=int(totnum-getNum)

if number %2 == 0: #짝수 시작 1/number 마지막 number/1
    a,b=number-sub,1+sub
else: #홀수 시작 number/1 마지막 1/number 
    a,b=1+sub,number-sub
    
result=str(a)+str('/')+str(b)
print(result)

사람마다 다른 규칙을 찾을 수 있겠지만 제가 찾아낸 규칙은 대각선 규칙으로
왼쪽 모서리 첫 대각선은 1개 : 1/1
다음 대각선은 2개 : 1/2, 2/1
다음 대각선은 3개 : 3/1, 2/2, 1/3 순서로 지그재그를 간다는 것입니다.

어찌되었건 대각선의 숫자를 이용하여 while문을 돌리는데

총 합이 우리가 얻은 getNum보다 작을 때 비로소 그 때의 number를 받아서 우리가 원하는 작업을 취하는 형식을 할 생각으로 구현하였습니다.

물론 totnum=n(n+1)/2 는 등차수열 합공식에서 구한 것 입니다.

그리고 저는 totnum과 우리가 얻고자하는 차이를 이용해 result 값을 나타내었는데 이 때 지그재그가 짝수일 때는 시작 1/number 마지막 number/1이라는 점과
홀수일 때는 시작 number/1 마지막 1/number을 이용하여 값을 구했다는 점 알려드립니다.

ALL RIGHT RESERVED TWINSTARINFO