본문으로 건너뛰기
yceffort
PostsSeriesTagsAbout🧪 Research
EN

Tweaks

theme
accent palette
film grain
minimal mode
BACK TO INDEX
◆ ESSAY
--min
--year
KOoriginal

mailMail icongithubtwitter
yceffort
•
© 2026
•
https://yceffort.kr
BACK TO INDEX
◆ ESSAY

Codility - Frog River One

avatar
yceffort
2020-06-24 · 2분
2min
2020year
KOoriginal
algorithm

Frog River One

문제

개구리가 X 까지 가고 싶은데, X까지 가기 위해서는 1부터 X를 모두 지나가야 한다. 예를 들어보자.

이렇게 배열이 주어져 있고

A[0] = 1
A[1] = 3
A[2] = 1
A[3] = 4
A[4] = 2
A[5] = 3
A[6] = 5
A[7] = 4

5까지 가고 싶다고 가정했을때, A[6]까지는 1~5의 지점이 모두 존재하기 때문에 갈수 있으며, 해당 인덱스인 6을 리턴한다.
하지만 갈 수 없을 경우 -1을 리턴하면 된다.

풀이

function solution(X, A) {
  // X 까지 가고 싶다면, 1~X 까지의 숫자가 모두 존재해야한다.
  let sum = (X * (X + 1)) / 2

  // 등장했던 숫자인지 아닌지 판별한다.
  // 이럴거면 굳이 Set을 안써도 되긴하네
  const appear = new Set()

  for (let i = 0; i < A.length; i++) {
    const target = A[i]

    // 전에 없던 숫자만
    if (!appear.has(target)) {
      // 숫자를 노출 목록(?) 에 더하고
      appear.add(target)

      // 합계에서 하나씩 뺸다
      sum -= target

      // 0 이 된다면 바로 그 index다
      if (sum === 0) {
        return i
      }

      // 만약 0 보다 작아진다면 이미 글러먹었으므로 리턴한다.
      if (sum < 0) {
        return -1
      }
    }
  }

  return -1
}

해설

배열 관련 문제가 나온다면 항상 최초 한번의 순회로 어떻게 잘 승부 볼 수 있을지 고민해보자

https://app.codility.com/demo/results/trainingKDYYTF-8AU/

관련 글

  • #javascript#algorithm

    자바스크립트로 메모이제이션 구현하기

    까먹지 않게 기억해두기

    2020-11-23·1분
  • #algorithm

    프로그래머 기초 수학 2-3 - 유리수, 무리수, 실수

    유리수, 무리수, 실수

    2020-07-29·5분
  • #algorithm

    프로그래머 기초 수학 2-2 - 기수법

    기수법

    2020-07-24·3분
  • #algorithm#mathematics

    프로그래머 기초 수학 2-1 - 정수

    정수

    2020-07-23·4분

새 글을 놓치고 싶지 않으시다면 RSS로 구독해 주세요.

RSS 구독 →

yceffort — 프론트엔드 엔지니어입니다. 발표·기술 자문·기고 문의는 이곳에서 받고 있습니다.

← Back to the blogIssue on GitHub →