1193. 분수 찾기

Rin01·2021년 7월 2일
0

problem_solving

목록 보기
1/24

문제가 궁금하시다면 아래의 링크를 눌러주세요!
문제 본문

접근 과정

  • 지그재그로 이어지는 순서에만 집중해 분수들의 값이 눈에 들어오지 않았다. 당연히 규칙을 알아낼 수 없었다... 분수의 값을 보고 나서야 규칙성을 파악할 수 있었다.
  • 첫 탐색은 1/1이고, 1개의 요소를 탐색한다. 그 다음 탐색에서는 2개의 요소를 탐색한다.
    • 이와 같이 x번째 탐색까지 나아가는데, x이 홀수인 경우 분모는 1부터 x까지 커지고, 분자는 x부터 1까지 작아진다. 그리고 x이 짝수인 경우는 분모와 분자가 반대가 된다!

풀이

N = int(input())
temp = 0          # 입력받은 정수 N이 몇번째 탐색에 속하는 수인지 알기 위한 변수
check = 1         # temp와 같은 목적으로 사용되었다.
odd_counter = 1   # 홀수번째 탐색인지, 짝수번째인지 확인하기 위한 변수

# 1번째에서는 1개의 요소, 2번째 탐색에서는 2개의 요소.. x번째 탐색에서는 x개의 요소를 탐색한다.
# cnt에 temp의 값을 할당하고, 이어서 temp에 check의 값을 더해준다.
# check는 1씩 증가한다. 
# 1번째에서는 1, 2번째에서는 2에서 3, 3번째에서는 4에서 6.. 이렇게 temp와 check의 범위가 생긴다.
# 만약 정수 N이 이 범위 안에 속한다면, N은 x번째 탐색에 속하게 된다.
while True:
    cnt = temp
    temp += check

    if N <= temp:
        break
    else:
        check += 1
        odd_counter += 1

if odd_counter % 2:         # x가 홀수인 경우
    mother = N - cnt
    son = (temp - N) + 1
else:                       # 짝수인 경우
    mother = (temp - N) + 1
    son = N - cnt

print(f'{son}/{mother}')

통과!

읽어주셔서 감사합니다!

profile
즐거워요

0개의 댓글