avatar
Published on

Codility - Frog River One

Author
  • avatar
    Name
    yceffort

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/