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번째 값 도착하면 결과값 도출
'백준 문제풀이' 카테고리의 다른 글
16496번: 큰 수 만들기 / platinum 5 / 그리디, 정렬 (0) | 2023.03.09 |
---|---|
1427번: 소트인사이드 / silver 5 / 문자열, 정렬 (0) | 2023.03.08 |
15651번: N과 M (3) / silver 3 / itertools (0) | 2023.03.06 |
4673번: 셀프 넘버 / silver 5 / 브루트포스 (0) | 2023.03.05 |
10844번: 쉬운 계단 수 / silver 1 / DP (0) | 2023.03.04 |