## solution
표에 분수가 지그재그로 나열되어 있는데, 순서대로 번호를 매긴다. 번호를 줄때 그 분수를 출력하는 문제.
1 - 1/1 (2)
2,3 - 1/2 2/1 (3)
4,5,6 - 3/1 2/2 1/3 (4)
이런식으로 진행된다.
번호가 주어진다면, 일단 분모분자의 합이 몇인지 판단을 해야되고, 그 판단은 1,23,345 숫자 묶음의 수가 1개씩 증가하고 있으므로 판단이 가능할것이다.
그 다음은 그 숫자를 어떻게 분모분자로 나누느냐 인데, 숫자묶음이 짝수개일때는 분자가 1부터 시작하고, 홀수일때는 반대로 시작한다는걸 이용해서 해보자.
## CODE
```python
import sys
input = sys.stdin.readline
input_num = int(input())
group = 2
start = 1
step = 2
while(True):
if input_num <= start:
break
group += 1
start += step
step += 1
if group%2 == 0:
numerator = 1
denominator = group - 1
while(True):
if input_num == start:
break
start -= 1
numerator += 1
denominator -= 1
else:
numerator = group - 1
denominator = 1
while(True):
if input_num == start:
break
start -= 1
numerator -= 1
denominator += 1
print(str(numerator)+'/'+str(denominator))
```
제출한 코드.
다른사람들의 코드를 보던 중에 발견한것으로, 일단 group%2==1이라고 가정하고 결과를 내보낸 뒤에, group%2==0의 경우 분모,분자만 바꾸는 풀이가 있었다. 중복되는 부분이 많아서 몇줄 줄일수는 있을것 같다.
변수를 여러줄에 걸쳐서 선언하는 버릇이 있는데 다음 문제부터는 줄 수를 줄여보기로 하자.
```python
import sys
input = sys.stdin.readline
input_num = int(input())
group,start,step = 2,1,2
while(True):
if input_num <= start:
break
group += 1;start += step;step += 1
numerator,denominator = 1, group - 1
while(True):
if input_num == start:
break
start -= 1;numerator += 1;denominator -= 1
if group%2==1: numerator,denominator=denominator,numerator
print(str(numerator)+'/'+str(denominator))
```
수정한 코드.
0 댓글