본문 바로가기
백준

[백준] 1193번 : 분수찾기 - 파이썬(Python) - 우당탕탕 개발자 되기 프로젝트

by 우당탕탕 개발자 2023. 7. 13.
728x90
반응형

 

 

1193번: 분수찾기

첫째 줄에 X(1 ≤ X ≤ 10,000,000)가 주어진다.

www.acmicpc.net

 

1. 문제 설명

2. 풀이과정

  1. sys.stdin.readline() 함수를 사용하기 위해 sys 모듈을 불러온다. import sys
  2. 몇 번 분수를 출력할 것인지 입력받는다. X = int(sys.stdin.readline())
  3. 대각선 별로 각 라인의 누적합만큼 번호를 갖는다. 또한 각 라인의 분모, 분자의 합은 라인 수에 1을 더한 값이다. 하여 분수를 구하려면 일단 몇 번 라인에 있는 분수인지 알아야 한다. 하여 분수의 개수라인 번호를 구한다.
  4. 분수의 개수를 구하기 위한 변수를 생성하고 초기화한다. count = 0
  5. 라인 번호를 구하기 위한 변수를 생성하고 초기화한다. line = 1
  6. 원하는 시점에서 종료하기 위해 무한 반복문을 사용한다. while (True)
  7. 라인 번호가 해당 라인에 존재하는 분수의 개수이므로 라인 번호를 분수의 개수에 더한 값이 입력받은 값보다 같거나 크면 해당 라인에 분수가 존재하므로 종료한다. if (count + line >= X): break
  8. 종료되지 않았다면 분수 개수에 라인 번호에 존재하는 분수의 개수를 더한다. count += line
  9. 라인 번호를 1 증가시켜 다음 라인으로 이동한다. line += 1
  10. 각 라인 분수의 분모, 분자의 합을 저장할 변수를 생성하고 라인 번호의 1을 더한 값을 저장한다. lineSum = line + 1
  11. 만약 라인 분수의 분모, 분자의 합이 짝수이면 if (lineSum % 2 == 0)
  12. 해당 라인의 분수는 분모가 1부터 시작하여 증가되는 순으로 번호가 매겨져 있다. 따라서 분자를 합에서 분모의 값이 1을 빼준 값부터 시작하여 1까지 반복한다. for i in range(lineSum - 1, 0, -1)
  13. 분수 번호를 1 증가시켜 준다. count += 1
  14. 만약 분수 번호가 찾으려는 분수의 번호이면 분수를 출력한다. if (count == X): print(f"{i}/{lineSum - i}")
  15. 분수를 찾았으므로 종료한다. break
  16. 반면에 라인 분수의 분모, 분자의 합이 홀수이면 else
  17. 해당 라인의 분수는 분자가 1부터 시작하여 증가되는 순으로 번호가 매겨져 있다. 따라서 1부터 합에서 분모의 최솟값인 1을 빼준 값까지 반복한다. for i in range(1, lineSum)
  18. 분수 번호를 1 증가시켜 준다. count += 1
  19. 만약 분수 번호가 찾으려는 분수의 번호이면 분수를 출력한다. if (count == X): print(f"{i}/{lineSum - i}")
  20. 분수를 찾았으므로 종료한다. break
반응형

3. 소스코드

import sys

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

count = 0
line = 1
while (True):
    if (count + line >= X):
        break

    count += line
    line += 1

lineSum = line + 1

if (lineSum % 2 == 0):
    for i in range(lineSum - 1, 0, -1):
        count += 1
        if (count == X):
            print(f"{i}/{lineSum - i}")
            break
else:
    for i in range(1, lineSum):
        count += 1
        if (count == X):
            print(f"{i}/{lineSum - i}")
            break
728x90
반응형