http://acmicpc.net/problem/1193
{코드}
n = int(input())
i = 0
while True:
i += 1
n -= i
if n <= 0:
n += i
i += 1
break
if i%2==0:
print((i-n), '/', n, sep='')
else:
print(n, '/', (i-n), sep='')
{설명}
문제를 보면 대각선을 하나의 그룹으로 생각하면 분수의 분모와 분자의 합이 같은 그룹 내에서는 같다는 것을 알 수 있습니다.
또한, 그룹의 분수의 수는 1씩 일정하게 증가하고 있다는 것을 알 수 있습니다.
그리고 분수의 분자는 몇번째 그룹이냐에 따라 짝수번째라면 분자가, 홀수번째라면 분모가 그룹 내에서 몇 번째 분수인지 가리킵니다.
이를 통해 분모와 분자를 구할 수 있습니다.
입력받은 N에서 i로 1, 2, 3...을 차례대로 0보다 작거나 같을 때까지 빼면 해당 그룹이 몇 번째 그룹인지 알 수 있습니다.
그런데 그룹의 분수의 분모와 분자의 합은 그룹의 번호보다 1 크므로 i를 1 증가시키고 N은 0보다 작거나 같은 수가 되기 직전의 수로 되돌립니다.
그러면 i는 그룹의 분모와 분자의 합, N은 그룹에서 몇번째 수인지 알 수 있습니다.(밑에 예시와 추가 설명)
이를 통해 만약 i가 짝수라면 N을 분자에, i-N은 분모에 넣고, 홀수라면 분자에 i-N, 분모에는 N을 넣어 출력합니다.
예시 - N이 14일 때, 답은 2/4
N |
i |
N - i |
결과 |
14 |
1 |
14 - 1 |
13 |
13 |
2 |
13 - 2 |
11 |
11 |
3 |
11 - 3 |
8 |
8 |
4 |
8 - 4 |
4 |
4 |
5 |
4 - 5 |
-1 (while문 탈출) |
이와 같이 i는 5에서 N이 0 이하가 되고 i는 1 증가한 6이 되고 N은 4가 되어 나옵니다.
이때 N은 그룹 안에서 몇 번째 분수인지를 나타내므로 4번째 분수라는 것을 알 수 있습니다.
현재 i는 짝수이므로 몇 번째인지는 분모가 나타내므로 분모는 4, 분자는 i-N인 2라는 것을 알 수 있고 이는 답과 같습니다.
예시 - N이 9일 때, 답은 3/2
N |
i |
N - i |
결과 |
9 |
1 |
9 - 1 |
8 |
8 |
2 |
8 - 2 |
6 |
6 |
3 |
6 - 3 |
3 |
3 |
4 |
3 - 4 |
-1 (while문 탈출) |
i는 5, N은 3이고 i가 홀수이므로 분자가 3, 분모가 5-3인 2이다. 답은 3/2가 된다.
'알고리즘 공부 > BOJ백준 풀이' 카테고리의 다른 글
[백준 10250번-파이썬/Python] ACM 호텔 (0) | 2020.10.31 |
---|---|
[백준 2869번-파이썬/Python] 달팽이는 올라가고 싶다 (0) | 2020.10.31 |
[백준 2292번-파이썬/Python] 벌집 (0) | 2020.10.15 |
[백준 2839번-파이썬/Python] 설탕 배달 (0) | 2020.10.15 |
[백준 1712번-파이선/Python] 손익분기점 (0) | 2020.10.15 |