분수찾기(1193) - JS

박정호·2022년 3월 10일
0

BAEKJOON

목록 보기
49/57
post-thumbnail

오늘의 교훈.. 문제를 정확히 봅시다. 문제를 다 해결해놓고 문제의 패턴을 파악하지못해 계속 고민하다가 결국 해결한 문제입니다.

대략적인 코드 설명

  1. while문을 통해 입력값의 위치를 알 수 있습니다.
    분자의 개수는 1,2,3,4씩 증가하고 거기에 맞춰 레벨이 1,2,3,4레벨씩 지정됩니다. 누적값은 1,3,6,10씩 증가하고 그 사이값은 2,3,4씩 증가합니다.

  2. max값은 입력값이 해당되는 레벨의 최대번째 값, min값은 입력값이 해당되는 레벨의 최소번째 값입니다.

  3. arr 배열에 min 부터 max까지의 값을 반복하여 대입합니다.
    ex) 입력값 11
    1->3->6->10->15로 11은 4레벨의 10에서 15 사이의 값입니다.
    따라서 arr배열에는 [10,11,12,13,14,15]가 저장됩니다.

  4. bunza값은 arr안에 존재하는 입력값의 인덱스값 +1 을 해줍니다. 분자,분모가 0으로 시작하지 않기 때문에 인덱스값+1을 해주는 것입니다.
    그리고 각 레벨에 속해있는 값들은 모두 분자와 분모의 합이 동일합니다. 예를 들어, 4레벨의 속해있는 분수값들의 합은 4+1로 총 5가 나옵니다. 따라서 분모값은 (레벨+1) - 분자값을 하면 구할 수 있습니다. 즉 분모 = (분모+분자) - 분자

  5. 이때 주의할 것은 짝수레벨은 분모가 오름차순, 분자가 내림차순입니다.
    홀수레벨은 그 반대이므로 홀수레벨의 경우 분모와 분자값을 바꿔줍니다.

  6. 마지막으로 입력값이 1일 경우 예외값이 발생하므로 1로 출력할 수 있는 조건문을 만들어 줍니다.

profile
기록하여 기억하고, 계획하여 실천하자. will be a FE developer (HOME버튼을 클릭하여 Notion으로 놀러오세요!)

0개의 댓글