분수찾기 문제.
규칙을 찾는 것이 어려웠다.
처음에 시간복잡도 생각없이 WHILE 반복으로 처리하다가 시간복잡도를 생각하고 처음부터 다시 풀었다.
문제 풀이 방법은 X가 주어졌을 때 X가 어떤 배열에서 시작되는지를 구해서 시작과 X의 차이만큼 분모, 분자를 계산해서 구했다.
예) X = 14
1의 시작은 1/1
2의 시작은 1/2
3의 시작은 3/1
4의 시작은 1/4
와 같이 짝수면 가로로 홀수면 세로 끝에서 시작하여
세로에서 시작시 분자 - 1, 분모 +1
가로에서 시작시 분자 + 1 , 분모 - 1 로 진행한다.
세로 3/1 에서 시작시 3/1-> 2/2 -> 1/3
가로 1/4 에서 시작시 1/4-> 2/3 -> 3/2 -> 4/1 순.
시간 복잡도를 생각하여 입력된 X만큼 반복하는 것이 아니라
X보다 큰 최대 카운트를 찾았다.
즉 14가 입력되었을때 14의 가장마지막 끝인 15를 구했고 15까지 오는 카운트는 5라는 것을 구했다.
규칙은
1 -> 1
2 -> 2,3
3 -> 4,5,6
4 -> 7,8,9,10
.
.
이제 14의 시작점을 알았으니 시작점과 14의 분자, 분모 차이만 빼주고 출력하면 끝!
내 풀이
'Baekjoon' 카테고리의 다른 글
[Baekjoon][Python] 2775 부녀회장이 될테야 (0) | 2021.03.30 |
---|---|
[Baekjoon][Python] 10250 ACM호텔 (0) | 2021.03.22 |
[Baekjoon][Python] 2869 달팽이는 올라가고 싶다 (0) | 2021.03.19 |
[Baekjoon][Python] 2292 벌집 (0) | 2021.03.17 |
[Baekjoon][Python] 1712 손익분기점 (0) | 2021.03.16 |