Notice
Recent Posts
Recent Comments
Link
«   2025/06   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30
Archives
Today
Total
관리 메뉴

행복한 개구리

백준 21.12.05. 1193번 - 분수찾기 본문

Algorithm/BaekJoon

백준 21.12.05. 1193번 - 분수찾기

HappyFrog 2021. 12. 5. 02:25

X = int(input())

layer = 0

while X>layer:
    X-=layer
    layer+=1


if layer % 2 == 0:
    numerator=X
    denominator=layer-X+1    
else:
    numerator = layer-X+1
    denominator = X
    
result = str(numerator)+"/"+str(denominator)
            
print(result)

 

  • 줄의 블록 수는 공차가 1인 등차수열로 증가합니다.
  • 그리고 짝수 줄의 시작은 분모가 크고 분자가 작은 진분수이며 홀수 줄의 시작은 분모가 작고 분자가 큰 가분수입니다.
  • n번째 줄의 블록 수는 n + 1의 값을 가집니다.
  • 우선 몇 번째 layer인지 알아야하기 때문에 줄을 구하는 식을 먼저 세워줍니다.
  • while반복문을 사용하여 X가 layer보다 클 때 반복하도록 설정하고 X는 layer만큼 계속 빼줍니다.
    • "줄"을 layer라고 하겠습니다.
  • 반복문이 실행됐다면 X는 그 layer보다 높은 layer에 있다는 뜻이므로 layer도 1만큼 더해줍니다.
  • 그러고 나면 X가 layer보다 작아지게 되는데 이때의 나머지가 바로 해당 layer에서 목표 블록의 위치입니다.
  • 따라서 홀수, 짝수 줄의 시작하는 방식이 다르므로 if문으로 두 가지 분기를 나눠주어 시작합니다.
  • 짝수라면 분모가 크기 때문에 layer - X(블록 위치) + 1이고 분자는 1씩 차례대로 증가하므로 X입니다.
  • 홀수는 이 반대로 작성하면 됩니다.
  • 그리고 이 분자 분모를 모아 출력하기 위해 str형식으로 형변환을 해준 뒤 출력해줍니다.