오늘의 교훈.. 문제를 정확히 봅시다. 문제를 다 해결해놓고 문제의 패턴을 파악하지못해 계속 고민하다가 결국 해결한 문제입니다.
대략적인 코드 설명
while문을 통해 입력값의 위치를 알 수 있습니다.
분자의 개수는 1,2,3,4씩 증가하고 거기에 맞춰 레벨이 1,2,3,4레벨씩 지정됩니다. 누적값은 1,3,6,10씩 증가하고 그 사이값은 2,3,4씩 증가합니다.max값은 입력값이 해당되는 레벨의 최대번째 값, min값은 입력값이 해당되는 레벨의 최소번째 값입니다.
arr 배열에 min 부터 max까지의 값을 반복하여 대입합니다.
ex) 입력값 11
1->3->6->10->15로 11은 4레벨의 10에서 15 사이의 값입니다.
따라서 arr배열에는 [10,11,12,13,14,15]가 저장됩니다.bunza값은 arr안에 존재하는 입력값의 인덱스값 +1 을 해줍니다. 분자,분모가 0으로 시작하지 않기 때문에 인덱스값+1을 해주는 것입니다.
그리고 각 레벨에 속해있는 값들은 모두 분자와 분모의 합이 동일합니다. 예를 들어, 4레벨의 속해있는 분수값들의 합은 4+1로 총 5가 나옵니다. 따라서 분모값은 (레벨+1) - 분자값을 하면 구할 수 있습니다. 즉 분모 = (분모+분자) - 분자이때 주의할 것은 짝수레벨은 분모가 오름차순, 분자가 내림차순입니다.
홀수레벨은 그 반대이므로 홀수레벨의 경우 분모와 분자값을 바꿔줍니다.마지막으로 입력값이 1일 경우 예외값이 발생하므로 1로 출력할 수 있는 조건문을 만들어 줍니다.