- Published on
Codility - Fish
- Author

- Name
- yceffort
Fish
๋ฌธ์
๊ธธ์ด N์ผ๋ก ์ด๋ฃจ์ด์ง ๋น์ด์์ง ์์ ๋ฐฐ์ด A, B๊ฐ ์ฃผ์ด์ง๋ค. ๋ฐฐ์ด A๋ ๋ฌผ๊ณ ๊ธฐ์ ํฌ๊ธฐ๋ฅผ, B๋ ๋ฌผ๊ณ ๊ธฐ์ ์์ง์์ ๋ํ๋ด๋๋ฐ, 0์ผ ๊ฒฝ์ฐ ์๋ก, 1์ผ ๊ฒฝ์ฐ ์๋๋ก ๊ฐ๋ค. ๋ง์ฝ ๋๋ง๋ฆฌ์ ๋ฌผ๊ณ ๊ธฐ๊ฐ ๋ง๋ ๊ฒฝ์ฐ, ๋ ์ฌ์ด์ฆ๊ฐ ํฐ ๋ฌผ๊ณ ๊ธฐ๊ฐ ์ก์๋จน์ด๋ฒ๋ฆฐ๋ค. ์ด ๋ ์ด์๋จ๋ ๋ฌผ๊ณ ๊ธฐ์ ์๋ฅผ ๊ตฌํ๋ผ.
A[0] = 4 B[0] = 0
A[1] = 3 B[1] = 1
A[2] = 2 B[2] = 0
A[3] = 1 B[3] = 0
A[4] = 5 B[4] = 0
0๋ฒ ๋ฌผ๊ณ ๊ธฐ๋ ์๋ก ๊ฐ๋ค
1๋ฒ ๋ฌผ๊ณ ๊ธฐ๋ ๋ฐ์ผ๋ก ๊ฐ๋๋ฐ, 2๋ฒ ๋ฌผ๊ณ ๊ธฐ๋ ์๋ก ๊ฐ๋ค. ์ด ๋ 1๋ฒ ๋ฌผ๊ณ ๊ธฐ๋ 2๋ฒ ๋ฌผ๊ณ ๊ธฐ๋ฅผ ๋จน๋๋ค
๋ง์ฐฌ๊ฐ์ง๋ก 3๋ฒ ๋ฌผ๊ณ ๊ธฐ๋ ๋จน๊ณ ,
๊ทธ๋ฌ๋ 4๋ฒ๋ฌผ๊ณ ๊ธฐ๋ 5๋ก 1๋ฒ ๋ฌผ๊ณ ๊ธฐ๋ณด๋ค ๋ฉ์น๊ฐ ํฌ๋ฏ๋ก 4๋ฒ ๋ฌผ๊ณ ๊ธฐ๊ฐ 1๋ฒ๋ฌผ๊ณ ๊ธฐ๋ฅผ ๋จน๋๋ค
์ด๋ ๊ทธ๋์ ์ด์๋จ๋ ๋ฌผ๊ณ ๊ธฐ๋ 2๋ง๋ฆฌ๋ค.
ํ์ด
function solution(A, B) {
// ํ๋ฅ๋ก ๊ฐ๋ ๋ฌผ๊ณ ๊ธฐ๋ฅผ ์๋ ์คํ
const stack = []
let count = 0
for (let i = 0; i < A.length; i++) {
// ๋ฌผ๊ณ ๊ธฐ๊ฐ ํ๋ฅ๋ก ๊ฐ๋ฉด ๊ทธ ๋ฌผ๊ณ ๊ธฐ์ ํฌ๊ธฐ๋ฅผ ์คํ์ ์๋๋ค
if (B[i] === 1) {
stack.push(A[i])
}
// ๋ฌผ๊ณ ๊ธฐ๊ฐ ์๋ฅ๋ก ๊ฐ๊ฒฝ์ฐ
else {
// ํ๋ฅํ ๋ฌผ๊ณ ๊ธฐ๊ฐ ์๋์ง ๊ณ์ํด์ ํ์ธํ๋ค
while (stack.length > 0) {
// ํ๋ฅํ ๋ฌผ๊ณ ๊ธฐ๊ฐ ์์ผ๋ฉด ํ๋ง๋ฆฌ ์ฉ ๋ง์งฑ ๋ฌ๋ค
// ํ๋ฅํ ๋ฌผ๊ณ ๊ธฐ๊ฐ ๋ ํฌ๋ฉด ํจ๋ฐฐ
if (stack[stack.length - 1] > A[i]) {
break
}
// ์๋ฅํ ๋ฌผ๊ณ ๊ธฐ๊ฐ ๋ ํฌ๋ฉด ํ๋ฅํ ๋ฌผ๊ณ ๊ธฐ ํ๋์ ์จํต์ ๋๋๋ค
else {
stack.pop()
}
}
// ๊ทธ๋ ๊ฒ ์๋ฅํ ๋ฌผ๊ณ ๊ธฐ๋ฅผ ๋ค ์ด๊ฒจ์ผ ์์กด ์นด์ดํธ๋ฅผ ์ฌ๋ฆด ์ ์๋ค.
if (stack.length === 0) {
count += 1
}
}
}
// ์ต์ข
์์กด ๋ช
๋จ์ ํ๋ฅ๋ก ๊ฐ๋ ๋ฌผ๊ณ ๊ธฐ ์ค ์ด์๋จ์ ๋ฌผ๊ณ ๊ธฐ + ์๋ฅ๋ก ๊ฐ๋๋ฐ ์ด์๋จ์ ๋ฌผ๊ณ ๊ธฐ๋ค.
return stack.length + count
}