본문 바로가기

백준 문제풀이

1193번: 분수찾기 / silver 5 / 구현

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

 

1193번: 분수찾기

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

www.acmicpc.net

'''
1193번: 분수찾기 / silver 5 / 구현
'''
# 1. 입력
x = int(input())
# 2. row_value 리스트 만들기 / 인덱스번호: row번  값: X번째
row_value = [0, 1]
num = 1
increase = 1
while True:
    if num >= 10000000:
        break
    num += increase
    row_value.append(num)
    increase += 1
# 3. x가 몇 번째 row 인지 확인 / x_row
for i in range(1, len(row_value)):
    if x < row_value[i]:
        x_row = i - 1
        break
# 4. x_row 홀수-짝수 판별해서 cnt, a, b 얻기
# cnt : (x_row)열은 cnt번째 부터 시작
# a, b : 분자, 분모
if x_row % 2 == 0:
    a, b = 1, x_row
    plus_a, plus_b = 1, -1
else:
    a, b = x_row, 1
    plus_a, plus_b = -1, 1
cnt = row_value[x_row]
# 5. cnt번째 값을 계속 하나씩 더하면서, 분수도 증감 연산 => x번째 값 도착하면 결과값 도출
while True:
    if cnt == x:
        print(f"{a}/{b}")
        break
    a += plus_a
    b += plus_b
    cnt += 1

 

내가 구현한 방식

 

# 1. 입력

x를 입력 받는다.

 

# 2. row_value 리스트 만들기 / 인덱스번호: row번  값: X번째

지그재그 배열 순서를 열(row)을 기준으로 리스트를 생성했다.

row_value[1] = 1   // 1열은 1번째 부터 시작  => 1/1

row_value[2] = 2   // 2열의 2번째 부터 시작  => 1/2

row_value[3] = 4   // 3열의 4번째 부터 시작  => 3/1

row_value[4] = 7   // 4열의 7번째 부터 시작  => 1/4

 

row_value = [0, 1, 2, 4, 7, 11, 16, 22, 29 ..... 10001629]

 

# 3. x가 몇 번째 row 인지 확인 / x_row

row_value 리스트를 활용해서 체크

 

# 4. x_row 홀수-짝수 판별해서 cnt, a, b 얻기
# cnt : (x_row)열은 cnt번째 부터 시작
# a, b : 분자, 분모

 

# 5. cnt번째 값을 계속 하나씩 더하면서, 분수도 증감 연산 => x번째 값 도착하면 결과값 도출