- Published on
Codility - Frog River One
- Author
- 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
}
ํด์ค
๋ฐฐ์ด ๊ด๋ จ ๋ฌธ์ ๊ฐ ๋์จ๋ค๋ฉด ํญ์ ์ต์ด ํ๋ฒ์ ์ํ๋ก ์ด๋ป๊ฒ ์ ์น๋ถ ๋ณผ ์ ์์์ง ๊ณ ๋ฏผํด๋ณด์