알고리즘(백준)/기타

[백준] 1193번 : 분수찾기 - python

되다 2023. 2. 5. 15:10

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

 


  • 문제


  • 설계하기(접근방법) 

1. 규칙 찾기

 

1번째 줄은 1/1                         총 1개 누적:1개

2번째 줄은 1/2 2/1                   총 2개 누적:3개

3번째 줄은 3/1 2/2 3/1             총 3개 누적:6개

4번째 줄은 1/4 2/3 3/2 4/1       총 4개 누적:10개

5번째 줄은 5/1 4/2 3/3 2/4 1/5 총 5개 누적:15개

 

n 번째 줄은 총 n 개의 분수가 있고 분모와 분자의 합은 n + 1이다.

홀수번째 줄은 분자가 분모보다 크고

짝수번째 줄은 분모가 분자보다 크다.

 

즉 x번째 분수 위치를 뜻하는 x를 입력받는다면

반복문을 통해 몇번째 줄인지 찾아낸다.

그리고 그줄이 홀수인지 짝수인지 구분한 다음에

그 줄에서 몇번째에 해당하는지 찾아 분수를 구해낸다.

 

 


  • 코드(출력)
x = int(input())  # 14

sum = 0
n = 1
while (n):
    sum += n  # 1, 3, 6, 10, 15까지
    if (sum >= x):
        break
    n += 1  # 2, 3, 4, 5번째

test = n + 1  # 분모와 분자의 합 = 6
location = x - (sum - n)  # 14-10=4, 5번째 줄에서 4번째 수


if (n % 2 == 0):  # n번째가 짝수라면
    print("{0}/{1}".format(location, test - location))
else:
    print("{0}/{1}".format(test - location, location))

  • 얻어갈 부분

1. 설계를 확실하게 하고, 예제를 따라가니 실수없이 코딩할 수 있었다.

2. while문의 특성을 잘 못써서 break문을 썼는데, 다음에는 없이 코드를 작성하자