์๋ฎฌ๋ ์ด์ ๋ฌธ์ ๋ ์ฃผ์ด์ง ์ํฉ์ ์๋ฒฝํ๊ฒ ์ดํด ํ๊ณ ์ด๋ฅผ ์ฝ๋๋ก ๊ตฌํ ํ๋ ๊ณผ์ ์ผ๋ก ๊ตฌํ์ ์ค์ ์ด ๋ง์ถฐ์ ธ ์๋ค.
๊ทธ๋์ ๋ฐ๋ก ๋ฌธ์ ํ์ด๋ก ๋์ด๊ฐ๋ณผ๊น ํ๋ค.
์ด์ง ๋ณํ ๋ฐ๋ณตํ๊ธฐ ์ถ์ฒ: ํ๋ก๊ทธ๋๋จธ์ค
๋ฌธ์ ์ค๋ช 0๊ณผ 1๋ก ์ด๋ฃจ์ด์ง ์ด๋ค ๋ฌธ์์ด x์ ๋ํ ์ด์ง ๋ณํ์ ๋ค์๊ณผ ๊ฐ์ด ์ ์ํฉ๋๋ค. x์ ๋ชจ๋ 0์ ์ ๊ฑฐํฉ๋๋ค. x์ ๊ธธ์ด๋ฅผ c๋ผ๊ณ ํ๋ฉด, x๋ฅผ "c๋ฅผ 2์ง๋ฒ์ผ๋ก ํํํ ๋ฌธ์์ด"๋ก ๋ฐ๊ฟ๋๋ค. ์๋ฅผ ๋ค์ด, x = "0111010"์ด๋ผ๋ฉด, x์ ์ด์ง ๋ณํ์ ๊ฐํ๋ฉด x = "0111010" -> "1111" -> "100" ์ด ๋ฉ๋๋ค. 0๊ณผ 1๋ก ์ด๋ฃจ์ด์ง ๋ฌธ์์ด s๊ฐ ๋งค๊ฐ๋ณ์๋ก ์ฃผ์ด์ง๋๋ค. s๊ฐ "1"์ด ๋ ๋๊น์ง ๊ณ์ํด์ s์ ์ด์ง ๋ณํ์ ๊ฐํ์ ๋, ์ด์ง ๋ณํ์ ํ์์ ๋ณํ ๊ณผ์ ์์ ์ ๊ฑฐ๋ ๋ชจ๋ 0์ ๊ฐ์๋ฅผ ๊ฐ๊ฐ ๋ฐฐ์ด์ ๋ด์ return ํ๋๋ก solution ํจ์๋ฅผ ์์ฑํด์ฃผ์ธ์.
function solution(s) {
let cnt = 0
let zeroCnt = 0
while (s !== '1') {
const zeroArr = s.match(/0/g)
if (zeroArr && zeroArr.length > 0) {
zeroCnt += zeroArr.length
}
s = s.replaceAll('0', '')
const target = s.length
s = target.toString(2)
cnt += 1
}
return [cnt, zeroCnt]
}
์ด ์ฝ๋๋ฅผ ๋ฆฌํฉํ ๋ง ํ๋ฉด ์ด๋ ๊ฒ๋ ๊ฐ๋ฅํ๋ค.
function solution(s) {
function solution(s) {
let cnt = 0
let zeroCnt = 0
while (s !== '1') {
zeroCnt += (s.match(/0/g) || []).length
s = s.replaceAll('0', '').length.toString(2)
cnt += 1
}
return [cnt, zeroCnt]
}
}
์นดํซ ์ถ์ฒ : ํ๋ก๊ทธ๋๋จธ์ค
๋ฌธ์ ์ค๋ช Leo๋ ์นดํซ์ ์ฌ๋ฌ ๊ฐ๋ค๊ฐ ์๋ ๊ทธ๋ฆผ๊ณผ ๊ฐ์ด ์ค์์๋ ๋ ธ๋์์ผ๋ก ์น ํด์ ธ ์๊ณ ํ ๋๋ฆฌ 1์ค์ ๊ฐ์์ผ๋ก ์น ํด์ ธ ์๋ ๊ฒฉ์ ๋ชจ์ ์นดํซ์ ๋ดค์ต๋๋ค.
Leo๋ ์ง์ผ๋ก ๋์์์ ์๊น ๋ณธ ์นดํซ์ ๋ ธ๋์๊ณผ ๊ฐ์์ผ๋ก ์์น ๋ ๊ฒฉ์์ ๊ฐ์๋ ๊ธฐ์ตํ์ง๋ง, ์ ์ฒด ์นดํซ์ ํฌ๊ธฐ๋ ๊ธฐ์ตํ์ง ๋ชปํ์ต๋๋ค. Leo๊ฐ ๋ณธ ์นดํซ์์ ๊ฐ์ ๊ฒฉ์์ ์ brown, ๋ ธ๋์ ๊ฒฉ์์ ์ yellow๊ฐ ๋งค๊ฐ๋ณ์๋ก ์ฃผ์ด์ง ๋ ์นดํซ์ ๊ฐ๋ก, ์ธ๋ก ํฌ๊ธฐ๋ฅผ ์์๋๋ก ๋ฐฐ์ด์ ๋ด์ return ํ๋๋ก solution ํจ์๋ฅผ ์์ฑํด์ฃผ์ธ์.
์ด ๋ฌธ์ ๋ ์ฃผ์ด์ง yellow๋ฅผ ๋ง๋ค ์ ์๋ ๋ชจ๋ ๊ฐ๋ก์ ๊ธธ์ด๋ฅผ ํ๋์ฉ ๋๋ ค๊ฐ๋ฉด์, yellow๋ฅผ ๋๋ฌ์ธ๋ brown ๊ฒฉ์์ ์๋ฅผ ๊ตฌํ์ฌ ์ฃผ์ด์ง brown๊ณผ ์ผ์นํ๋ฉด brown์ ๊ฐ๋ก, ์ธ๋ก ๊ฒฉ์๋ฅผ ๋ฆฌํดํ๋ค. yellow์ ๊ฐ๋ก ๊ธธ์ด๋ฅผ 1๋ถํฐ ํ๋์ฉ ๋๋ ค๊ฐ๋ฉด์ ์กฐ๊ฑด์ ๋ง๋์ง ์ฐพ๋ ๋ฐฉ๋ฒ์ ํตํด ์์ ํ์์์ ์ ์ ์๋ค.
/**
*
* TimeComplexity: O(yellow/2)
* @param {*} brown
* @param {*} yellow
* @returns
*/
function solution(brown, yellow) {
let yellow_w = 0
let brown_w = 0
let brown_h = 0
// yellow๊ฐ 1์ด๋ฉด ๊ฐ๋ก, ์ธ๋ก ๊ธธ์ด๋ 3 (์ต์๊ฐ)
if (yellow === 1) {
return [3, 3]
}
// yellow_h ๋ฅผ 1๋ถํฐ yellow/2๊น์ง ๋ฐ๋ณต
for (let yellow_h = 1; yellow_h <= yellow / 2; yellow_h++) {
//yellow์ ๊ฐ๋ก๊ธธ์ด๊ฐ ์ ์์ธ์ง ํ์ธ
if (yellow % yellow_h !== 0) continue
//yellow์ ๊ฐ๋ก ๊ธธ์ด ๊ตฌํ๊ธฐ
yellow_w = Math.floor(yellow / yellow_h)
// yellow์ ๊ฐ๋ก ๊ธธ์ด๊ฐ ์ธ๋ก ๊ธธ์ด๋ณด๋ค ์์ผ๋ฉด continue
if (yellow_h > yellow_w) continue
// brown์ ๊ฐ๋ก, ์ธ๋ก ๊ธธ์ด ๊ตฌํ๊ธฐ
brown_w = yellow_w + 2
brown_h = yellow_h + 2
// brown์ ๊ฐ๋ก, ์ธ๋ก ๊ธธ์ด๊ฐ ๋ง์ผ๋ฉด break
if (brown_w * 2 + brown_h * 2 - 4 === brown) break
yellow_w += 1
}
return [brown_w, brown_h]
}
๋กค ์ผ์ดํฌ ์๋ฅด๊ธฐ ์ถ์ฒ : ํ๋ก๊ทธ๋๋จธ์ค
๋ฌธ์ ์์
๋ฌธ์ ์ค๋ช ์ฒ ์๋ ๋กค์ผ์ดํฌ๋ฅผ ๋ ์กฐ๊ฐ์ผ๋ก ์๋ผ์ ๋์๊ณผ ํ ์กฐ๊ฐ์ฉ ๋๋ ๋จน์ผ๋ ค๊ณ ํฉ๋๋ค. ์ด ๋กค์ผ์ดํฌ์๋ ์ฌ๋ฌ๊ฐ์ง ํ ํ๋ค์ด ์ผ๋ ฌ๋ก ์ฌ๋ ค์ ธ ์์ต๋๋ค. ์ฒ ์์ ๋์์ ๋กค์ผ์ดํฌ๋ฅผ ๊ณตํํ๊ฒ ๋๋ ๋จน์ผ๋ ค ํ๋๋ฐ, ๊ทธ๋ค์ ๋กค์ผ์ดํฌ์ ํฌ๊ธฐ๋ณด๋ค ๋กค์ผ์ดํฌ ์์ ์ฌ๋ ค์ง ํ ํ๋ค์ ์ข ๋ฅ์ ๋ ๊ด์ฌ์ด ๋ง์ต๋๋ค. ๊ทธ๋์ ์๋ฆฐ ์กฐ๊ฐ๋ค์ ํฌ๊ธฐ์ ์ฌ๋ ค์ง ํ ํ์ ๊ฐ์์ ์๊ด์์ด ๊ฐ ์กฐ๊ฐ์ ๋์ผํ ๊ฐ์ง์์ ํ ํ์ด ์ฌ๋ผ๊ฐ๋ฉด ๊ณตํํ๊ฒ ๋กค์ผ์ดํฌ๊ฐ ๋๋์ด์ง ๊ฒ์ผ๋ก ์๊ฐํฉ๋๋ค. ์๋ฅผ ๋ค์ด, ๋กค์ผ์ดํฌ์ 4๊ฐ์ง ์ข ๋ฅ์ ํ ํ์ด ์ฌ๋ ค์ ธ ์๋ค๊ณ ํฉ์๋ค. ํ ํ๋ค์ 1, 2, 3, 4์ ๊ฐ์ด ๋ฒํธ๋ก ํ์ํ์ ๋, ์ผ์ดํฌ ์์ ํ ํ๋ค์ด [1, 2, 1, 3, 1, 4, 1, 2] ์์๋ก ์ฌ๋ ค์ ธ ์์ต๋๋ค. ๋ง์ฝ ์ธ ๋ฒ์งธ ํ ํ(1)๊ณผ ๋ค ๋ฒ์งธ ํ ํ(3) ์ฌ์ด๋ฅผ ์๋ฅด๋ฉด ๋กค์ผ์ดํฌ์ ํ ํ์ [1, 2, 1], [3, 1, 4, 1, 2]๋ก ๋๋๊ฒ ๋ฉ๋๋ค. ์ฒ ์๊ฐ [1, 2, 1]์ด ๋์ธ ์กฐ๊ฐ์, ๋์์ด [3, 1, 4, 1, 2]๊ฐ ๋์ธ ์กฐ๊ฐ์ ๋จน๊ฒ ๋๋ฉด ์ฒ ์๋ ๋ ๊ฐ์ง ํ ํ(1, 2)์ ๋ง๋ณผ ์ ์์ง๋ง, ๋์์ ๋ค ๊ฐ์ง ํ ํ(1, 2, 3, 4)์ ๋ง๋ณผ ์ ์์ผ๋ฏ๋ก, ์ด๋ ๊ณตํํ๊ฒ ๋๋์ด์ง ๊ฒ์ด ์๋๋๋ค. ๋ง์ฝ ๋กค์ผ์ดํฌ์ ๋ค ๋ฒ์งธ ํ ํ(3)๊ณผ ๋ค์ฏ ๋ฒ์งธ ํ ํ(1) ์ฌ์ด๋ฅผ ์๋ฅด๋ฉด [1, 2, 1, 3], [1, 4, 1, 2]๋ก ๋๋๊ฒ ๋ฉ๋๋ค. ์ด ๊ฒฝ์ฐ ์ฒ ์๋ ์ธ ๊ฐ์ง ํ ํ(1, 2, 3)์, ๋์๋ ์ธ ๊ฐ์ง ํ ํ(1, 2, 4)์ ๋ง๋ณผ ์ ์์ผ๋ฏ๋ก, ์ด๋ ๊ณตํํ๊ฒ ๋๋์ด์ง ๊ฒ์ ๋๋ค. ๊ณตํํ๊ฒ ๋กค์ผ์ดํฌ๋ฅผ ์๋ฅด๋ ๋ฐฉ๋ฒ์ ์ฌ๋ฌ๊ฐ์ง ์ผ ์ ์์ต๋๋ค. ์์ ๋กค์ผ์ดํฌ๋ฅผ [1, 2, 1, 3, 1], [4, 1, 2]์ผ๋ก ์๋ผ๋ ๊ณตํํ๊ฒ ๋๋ฉ๋๋ค. ์ด๋ค ๊ฒฝ์ฐ์๋ ๋กค์ผ์ดํฌ๋ฅผ ๊ณตํํ๊ฒ ๋๋์ง ๋ชปํ ์๋ ์์ต๋๋ค. ๋กค์ผ์ดํฌ์ ์ฌ๋ ค์ง ํ ํ๋ค์ ๋ฒํธ๋ฅผ ์ ์ฅํ ์ ์ ๋ฐฐ์ด topping์ด ๋งค๊ฐ๋ณ์๋ก ์ฃผ์ด์ง ๋, ๋กค์ผ์ดํฌ๋ฅผ ๊ณตํํ๊ฒ ์๋ฅด๋ ๋ฐฉ๋ฒ์ ์๋ฅผ return ํ๋๋ก solution ํจ์๋ฅผ ์์ฑํด์ฃผ์ธ์.
์ด ๋ฌธ์ ๋ ๋ฌธ์ ์์ ์ฃผ์ด์ง ํ ํ์ left์ right๋ฅผ ๋๋์ด ๊ทธ๋๋ก ๊ตฌํํ์๋ค. ๊ตฌํ ์๋ฃ๊ตฌ์กฐ๋ Map์ ์ด์ฉํ์ฌ left์ right์ ํ ํ์ ๋ฃ๊ณ ๋นผ๋ ๋ฐฉ์์ผ๋ก ์ ๊ทผํ์๋ค.
/**
*
*
* Time Complexity : O(n)
* @param {*} topping
* @returns
*/
function solution(topping) {
var answer = 0
let left = []
let right = []
const leftToppingMapper = new Map()
const rightToppingMapper = new Map()
// ์ด๊ธฐ right์ ๋ชจ๋ ํ ํ์ ๋ฃ๊ณ , ํ ํ์ ๊ฐ์๋ฅผ ์ผ๋ค
topping.forEach((v) => {
rightToppingMapper.set(v, (rightToppingMapper.get(v) || 0) + 1)
right.push(v)
})
//์ฃผ์ด์ง ํ ํ๋งํผ ์ํํ๋ฉด์ right์์ ํ๋์ฉ pop ํ์ฌ, left์ ๋ฃ๋๋ค.
// ์ํ๋ right๊ฐ ๋น๋๊น์ง ํ๋ค.
while (right.length) {
//left๋ก ์ฎ๊ธฐ๊ธฐ
const last = right.pop()
left.push(last)
//left์ ํ ํ์ ์ถ๊ฐ ํ๋ค.
leftToppingMapper.set(last, (leftToppingMapper.get(last) || 0) + 1)
//right์์ ํ ํ์ ์ ๊ฑฐํ๋ค.
rightToppingMapper.set(last, rightToppingMapper.get(last) - 1)
//right์์ ํ ํ์ ์ ๊ฑฐํ ๋, 0 ์ด ๋๋ฉด map์์ ์ ๊ฑฐํ๋ค.
if (rightToppingMapper.get(last) === 0) {
rightToppingMapper.delete(last)
}
// map์ ์ ์ฅ๋ key์ ๊ฐ์๋ก ๋น๊ตํ์ฌ ๊ฐ์ผ๋ฉด answer๋ฅผ ์ฆ๊ฐ์ํจ๋ค.
if (leftToppingMapper.size === rightToppingMapper.size) {
answer += 1
}
}
return answer
}
์ ํ์ ์๊ฐ์ด๋ ์ถ์ฒ:ํ๋ก๊ทธ๋๋จธ์ค
๋ฌธ์ ์ค๋ช OO ์ฐ๊ตฌ์๋ ํ ๋ฒ์ K ์นธ์ ์์ผ๋ก ์ ํํ๊ฑฐ๋, (ํ์ฌ๊น์ง ์จ ๊ฑฐ๋ฆฌ) x 2 ์ ํด๋นํ๋ ์์น๋ก ์๊ฐ์ด๋์ ํ ์ ์๋ ํน์ํ ๊ธฐ๋ฅ์ ๊ฐ์ง ์์ด์ธ ์ํธ๋ฅผ ๊ฐ๋ฐํ์ฌ ํ๋งคํ๊ณ ์์ต๋๋ค. ์ด ์์ด์ธ ์ํธ๋ ๊ฑด์ ์ง๋ก ์๋๋๋๋ฐ, ์๊ฐ์ด๋์ ํ๋ฉด ๊ฑด์ ์ง ์ฌ์ฉ๋์ด ์ค์ง ์์ง๋ง, ์์ผ๋ก K ์นธ์ ์ ํํ๋ฉด K ๋งํผ์ ๊ฑด์ ์ง ์ฌ์ฉ๋์ด ๋ญ๋๋ค. ๊ทธ๋ฌ๋ฏ๋ก ์์ด์ธ ์ํธ๋ฅผ ์ฐฉ์ฉํ๊ณ ์ด๋ํ ๋๋ ์๊ฐ ์ด๋์ ํ๋ ๊ฒ์ด ๋ ํจ์จ์ ์ ๋๋ค. ์์ด์ธ ์ํธ ๊ตฌ๋งค์๋ ์์ด์ธ ์ํธ๋ฅผ ์ฐฉ์ฉํ๊ณ ๊ฑฐ๋ฆฌ๊ฐ N ๋งํผ ๋จ์ด์ ธ ์๋ ์ฅ์๋ก ๊ฐ๋ ค๊ณ ํฉ๋๋ค. ๋จ, ๊ฑด์ ์ง ์ฌ์ฉ๋์ ์ค์ด๊ธฐ ์ํด ์ ํ๋ก ์ด๋ํ๋ ๊ฒ์ ์ต์๋ก ํ๋ ค๊ณ ํฉ๋๋ค. ์์ด์ธ ์ํธ ๊ตฌ๋งค์๊ฐ ์ด๋ํ๋ ค๋ ๊ฑฐ๋ฆฌ N์ด ์ฃผ์ด์ก์ ๋, ์ฌ์ฉํด์ผ ํ๋ ๊ฑด์ ์ง ์ฌ์ฉ๋์ ์ต์๊ฐ์ returnํ๋ solution ํจ์๋ฅผ ๋ง๋ค์ด ์ฃผ์ธ์. ์๋ฅผ ๋ค์ด ๊ฑฐ๋ฆฌ๊ฐ 5๋งํผ ๋จ์ด์ ธ ์๋ ์ฅ์๋ก ๊ฐ๋ ค๊ณ ํฉ๋๋ค. ์์ด์ธ ์ํธ๋ฅผ ์ ๊ณ ๊ฑฐ๋ฆฌ๊ฐ 5๋งํผ ๋จ์ด์ ธ ์๋ ์ฅ์๋ก ๊ฐ ์ ์๋ ๊ฒฝ์ฐ์ ์๋ ์ฌ๋ฌ ๊ฐ์ง์ ๋๋ค. ์ฒ์ ์์น 0 ์์ 5 ์นธ์ ์์ผ๋ก ์ ํํ๋ฉด ๋ฐ๋ก ๋์ฐฉํ์ง๋ง, ๊ฑด์ ์ง ์ฌ์ฉ๋์ด 5 ๋งํผ ๋ญ๋๋ค. ์ฒ์ ์์น 0 ์์ 2 ์นธ์ ์์ผ๋ก ์ ํํ ๋ค์ ์๊ฐ์ด๋ ํ๋ฉด (ํ์ฌ๊น์ง ์จ ๊ฑฐ๋ฆฌ : 2) x 2์ ํด๋นํ๋ ์์น๋ก ์ด๋ํ ์ ์์ผ๋ฏ๋ก ์์น 4๋ก ์ด๋ํฉ๋๋ค. ์ด๋ 1 ์นธ์ ์์ผ๋ก ์ ํํ๋ฉด ๋์ฐฉํ๋ฏ๋ก ๊ฑด์ ์ง ์ฌ์ฉ๋์ด 3 ๋งํผ ๋ญ๋๋ค. ์ฒ์ ์์น 0 ์์ 1 ์นธ์ ์์ผ๋ก ์ ํํ ๋ค์ ์๊ฐ์ด๋ ํ๋ฉด (ํ์ฌ๊น์ง ์จ ๊ฑฐ๋ฆฌ : 1) x 2์ ํด๋นํ๋ ์์น๋ก ์ด๋ํ ์ ์์ผ๋ฏ๋ก ์์น 2๋ก ์ด๋๋ฉ๋๋ค. ์ด๋ ๋ค์ ์๊ฐ์ด๋ ํ๋ฉด (ํ์ฌ๊น์ง ์จ ๊ฑฐ๋ฆฌ : 2) x 2 ๋งํผ ์ด๋ํ ์ ์์ผ๋ฏ๋ก ์์น 4๋ก ์ด๋ํฉ๋๋ค. ์ด๋ 1 ์นธ์ ์์ผ๋ก ์ ํํ๋ฉด ๋์ฐฉํ๋ฏ๋ก ๊ฑด์ ์ง ์ฌ์ฉ๋์ด 2 ๋งํผ ๋ญ๋๋ค. ์์ 3๊ฐ์ง ๊ฒฝ์ฐ ๊ฑฐ๋ฆฌ๊ฐ 5๋งํผ ๋จ์ด์ ธ ์๋ ์ฅ์๋ก ๊ฐ๊ธฐ ์ํด์ 3๋ฒ์งธ ๊ฒฝ์ฐ๊ฐ ๊ฑด์ ์ง ์ฌ์ฉ๋์ด ๊ฐ์ฅ ์ ์ผ๋ฏ๋ก ๋ต์ 2๊ฐ ๋ฉ๋๋ค. ์ ํ ์ฌํญ ์ซ์ N: 1 ์ด์ 10์ต ์ดํ์ ์์ฐ์ ์ซ์ K: 1 ์ด์์ ์์ฐ์
์ด ๋ฌธ์ ๋ ์ ํ ํ ๋์ ์๊ฐ ์ด๋ ํ ๋์ ๋ชจ๋ ๊ฒฝ์ฐ์ ์์์ ๋์ฐฉ์ง์ ๊น์ง์ ์ต์๊ฐ์ ๊ตฌํ๋ ๋ฐฉ๋ฒ์ผ๋ก ์ ๊ทผํ์๋ค. ํ์ง๋ง N์ด 10 ์ต์ด๋ฏ๋ก DFS๋ก๋ ์๊ฐ์ด๊ณผ๊ฐ ๋๋ค.
/**
*
* @param {*} n
* @returns
*/
function solution(n) {
let minVals = []
dfs(1, 1)
function dfs(curVal, curLocation) {
if (curLocation === n) {
minVals.push(curVal)
return
}
dfs(curVal + 1, curLocation + 1) //jump
if (curLocation * 2 > n) {
return
}
dfs(curVal, curLocation * 2) //์๊ฐ์ด๋
}
return Math.min(...minVals)
}
๋ฌธ์ ์ ๊ท์น์ ์ ํ์ฉํ๋ ๊ฒ์ด ์ด ๋ฌธ์ ์ ํต์ฌ์ด๋ค.
์๊ฐ์ด๋์ ๊ฒฝ์ฐ ํ์ฌ ์์น์์ ๋ค์์์น๋ 2๋ฐฐ์ด๋ค. ์ฆ ๋์ฐฉ์ง์ (N)์ด ์ง์์ด๋ฉด ์๊ฐ์ด๋์ ํ๋ค๋ ์๋ฏธ์ด๋ฏ๋ก N/2๋ก ์ด๋ํ๋ค. ์ด ๋ ๋ฐฐํฐ๋ฆฌ ์๋น๋ ์๋ค.
๋์ฐฉ์ง์ ์ด ํ์์ธ ๊ฒฝ์ฐ๋ ์ ํ๋ฅผ ํ๋ค๊ณ ๋ณผ ์ ์๋ค.
๊ทธ๋ผ ๋์ฐฉ์ง์ ์ 2๋ก ๋๋์ด 0์ผ๋ก ๋จ์ด์ง๋ฉด ๋ฐฐํฐ๋ฆฌ ์๋น๋ ์์ผ๋ฉฐ, 2๋ก ๋๋์ด ๋๋จธ์ง๊ฐ 1์ด ๋๋ฉด ์ ํ๋ฅผ ํ ๋ฒ ํ๋ค๊ณ ๋ณผ ์ ์๋ค.
์ด์ง์๋ก ๋ณํํ๋ ๊ณผ์ ๊ณผ ๊ฐ๋ค.
function solution(n) {
return Array.from(n.toString(2)).filter((v) => v === '1').length
}
์บ๋ฆญํฐ์ ์ขํ ์ถ์ฒ:ํ๋ก๊ทธ๋๋จธ์ค
๋ฌธ์ ์ค๋ช ๋จธ์ฑ์ด๋ RPG๊ฒ์์ ํ๊ณ ์์ต๋๋ค. ๊ฒ์์๋ up, down, left, right ๋ฐฉํฅํค๊ฐ ์์ผ๋ฉฐ ๊ฐ ํค๋ฅผ ๋๋ฅด๋ฉด ์, ์๋, ์ผ์ชฝ, ์ค๋ฅธ์ชฝ์ผ๋ก ํ ์นธ์ฉ ์ด๋ํฉ๋๋ค. ์๋ฅผ ๋ค์ด [0,0]์์ up์ ๋๋ฅธ๋ค๋ฉด ์บ๋ฆญํฐ์ ์ขํ๋ [0, 1], down์ ๋๋ฅธ๋ค๋ฉด [0, -1], left๋ฅผ ๋๋ฅธ๋ค๋ฉด [-1, 0], right๋ฅผ ๋๋ฅธ๋ค๋ฉด [1, 0]์ ๋๋ค. ๋จธ์ฑ์ด๊ฐ ์ ๋ ฅํ ๋ฐฉํฅํค์ ๋ฐฐ์ด keyinput์ ๋งต์ ํฌ๊ธฐ board์ด ๋งค๊ฐ๋ณ์๋ก ์ฃผ์ด์ง๋๋ค. ์บ๋ฆญํฐ๋ ํญ์ [0,0]์์ ์์ํ ๋ ํค ์ ๋ ฅ์ด ๋ชจ๋ ๋๋ ๋ค์ ์บ๋ฆญํฐ์ ์ขํ [x, y]๋ฅผ returnํ๋๋ก solution ํจ์๋ฅผ ์์ฑํด์ฃผ์ธ์. [0, 0]์ board์ ์ ์ค์์ ์์นํฉ๋๋ค. ์๋ฅผ ๋ค์ด board์ ๊ฐ๋ก ํฌ๊ธฐ๊ฐ 9๋ผ๋ฉด ์บ๋ฆญํฐ๋ ์ผ์ชฝ์ผ๋ก ์ต๋ [-4, 0]๊น์ง ์ค๋ฅธ์ชฝ์ผ๋ก ์ต๋ [4, 0]๊น์ง ์ด๋ํ ์ ์์ต๋๋ค.
์ด ๋ฌธ์ ๋ ์ฃผ์ด์ง ์ด๋ํ๋ ์ขํ๋ฅผ ๊ทธ๋๋ก ๋งคํ ๊ฐ์ฒด๋ก ์ค์ ํด ๋๊ณ , ์์์ขํ๋ค์ ์ํํ๋ฉด์ board์ ๊ฒฝ๊ณ๋ฅผ ํ๋จํ์ฌ ๊ฒฝ๊ณ ๋ด์ ์๋ค๋ฉด ํ์ฌ ์ขํ์ ์ํํ๋ ์์ ์ขํ๋ฅผ ๋ํด์ค๋ค.
function solution(keyinput, board) {
const controlMapper = {
left: [-1, 0],
right: [1, 0],
up: [0, 1],
down: [0, -1],
}
let cur = [0, 0] //์์ ์ขํ
for (const key of keyinput) {
const [a, b] = controlMapper[key]
const [curA, curB] = cur
const w = Math.floor(board[0] / 2) //๊ฐ๋ก ์ขํ
const h = Math.floor(board[1] / 2) //์ธ๋ก ์ขํ
// ์ฃผ์ด์ง board ์ ๊ฒฝ๊ณ๋ฅผ ๋ฒ์ด๋๋ฉด ์
๋ ฅ ๋ฌด์
if (-w > curA + a || w < curA + a || curB + b > h || curB + b < -h) continue
cur = [a + curA, b + curB]
}
return cur
}