점점 난이도가 올라가고 있는 것 같은 느낌이든다. 벌집 문제 푼지 얼마나 되었다고 바로 다음 문제부터 막히는건지...🫠
이 문제를 처음 읽고나서는 2차원 배열이라고 가정하고 각 요소의 행과 열 위치 인덱스 값을 더하고 곱하고 나누고 빼면서 머리를 쥐어짜며 규칙을 찾고자 했다. (아무래도 이미지를 보고 배열로 풀어야한다는 의식이 컸던것 같다 😭)
하지만 결국 규칙을 찾지 못했고, 구글링으로 풀이를 찾아낼 수 밖에 없었다. 단, 풀이만 참고하고 코드는 직접 작성했다. (이것만은 양보못한다!!)
무한히 큰 배열에 다음과 같이 분수들이 적혀있다.
이와 같이 나열된 분수들을 1/1 → 1/2 → 2/1 → 3/1 → 2/2 → … 과 같은 지그재그 순서로 차례대로 1번, 2번, 3번, 4번, 5번, … 분수라고 하자.
X가 주어졌을 때, X번째 분수를 구하는 프로그램을 작성하시오.
막상 풀이를 생각하면 간단하다. 하단의 이미지처럼 분모와 분자의 합(T)이 공통된 위치별로 그룹화하여 대각선 단위로 살펴보면 된다.
그리고 각 대각선별 분수의 개수도 보면 분모와 분자의 합(T)에서 하나를 뺀 수라는 것을 확인할 수 있다. 또한 분모와 분자의 합(T)이 홀수이냐 짝수이냐에 따라 읽는 순서가 달라지는 것도 알 수 있다.
정리하자면 다음과 같다.
코드로 옮길 때의 중점사항은 다음과 같다.