[백준] 분수찾기_1193번

손시연·2022년 4월 5일
0

algorithm

목록 보기
5/18

분수찾기_1193번

코드

def whereisX(x):
    n, tmp = 0, 0
    while True:
        an = (n**2 + n + 2) // 2
        if tmp <= x < an:
            return [n, x-tmp]
            break
        n += 1
        tmp = an

x = int(input())
list = whereisX(x)
level = list.pop(0)
distance = list.pop(0)
if level % 2 == 1:
    print(str(level-distance) + "/" + str(distance+1))
else:
    print(str(distance+1) + "/" + str(level-distance))

풀이노트

1
2 3
4 5 6
7 8 9 10
11 12 13 14 15 16
~> 다음과 같은 계단형태임을 알게 됨

1 2 4 7 11 ..
계차수열
an = (n**2 + n + 2) / 2

  • input으로 숫자가 들어오므로, x의 계단 위치(level)를 아는 것이 중요하다고 생각함
  • 앞 숫자인 1 2 4 7 11 이 계차수열임을 알고, 그것의 일반항 an을 검색하여 알아냄
  • def whereisX() 로 처리
  • 함수 처리 중 분모 분자 파악을 위해 level에서 몇번째인지(distance)가 필요함
  • 함수 return 부분을 list로 처리하여 두 개 return 할 수 있게 함
  • level이 홀수, 짝수에 따라 다르게 처리해야 함
  • 홀수는 분자가 5 4 3 2 1 식으로 작아지고, 짝수는 1 2 3 4 식으로 커짐

소요시간 : 75분

profile
Server Engineer

0개의 댓글