๋ฌธ์
์ต๋น๊ฐ์ ์ฃผ์ด์ง ๊ฐ ์ค์์ ๊ฐ์ฅ ์์ฃผ ๋์ค๋ ๊ฐ์ ์๋ฏธํฉ๋๋ค. ์ ์ ๋ฐฐ์ด array๊ฐ ๋งค๊ฐ๋ณ์๋ก ์ฃผ์ด์ง ๋, ์ต๋น๊ฐ์ return ํ๋๋ก solution ํจ์๋ฅผ ์์ฑํด๋ณด์ธ์. ์ต๋น๊ฐ์ด ์ฌ๋ฌ ๊ฐ๋ฉด -1์ return ํฉ๋๋ค.
์ ์ถ๋ ฅ ์์๋ฅผ ๋ณด๋ฉด ์ต๋น๊ฐ์ด 1๊ฐ์ธ ๊ฒฝ์ฐ์๋ ๊ทธ ์ต๋น๊ฐ์ ํด๋นํ๋ ์์๋ฅผ,
์ต๋น๊ฐ์ด ์ฌ๋ฌ ๊ฐ์ผ ๋๋ -1์ ๋ฐํํ๋๋ก ํ๋ค.
ํ์ด ๊ณผ์
์๋ฃ๊ตฌ์กฐ ์ค ํ๋์ธ Map์ ์ด์ฉํด์ ํ๋ ค๊ณ ํ๋๋ฐ, 70์ ๊น์ง๋ฐ์ ๋ฐ์ง ๋ชปํด์ (4๊ฐ์ ํ ์คํธ ์ผ์ด์ค ์คํจ ๐...)
๊ฒฐ๊ตญ ๋น์ทํ ๋ฐฉ๋ฒ์ผ๋ก ํ์ดํ ๋ถ์ ์ฐธ๊ณ ํด์ Map ์ด๊ธฐํ ๋ถ๋ถ์ ์ถ๊ฐํ๋ค. ใ ใ
์ฒ์์ ์๊ฐํ ๊ณผ์ ์ ์ด๋ฌ๋ค.
- Map ๊ฐ์ฒด๋ฅผ ์์ฑํ๋ค.
- ๋ฐฐ์ด์ ์ํํ๋ฉฐ Map์ ๋น๋์๋ฅผ ์ ๋ฐ์ดํธํ๋ค.
- ์ต๋ ์ต๋น๊ฐ์ ์ฐพ๋๋ค.
- ์ต๋น๊ฐ์ด ์ฌ๋ฌ ๊ฐ์ธ์ง ์ฒดํฌํ๋ค. -> -1 ๋ฐํ, ์๋๋ฉด ์ต๋น๊ฐ ๋ฐํ
๋๋ ๋น๋์๋ฅผ ์ ๋ฐ์ดํธํ๊ธฐ ์ํด reduce ๋ฉ์๋๋ฅผ ์ฌ์ฉํ์๋๋ฐ, ์๋์ ์ฝ๋๋ ๋น๋์ ์ฒดํฌ๋ ์ ๋๊ธด ํ๋ค.
array.forEach((el) => {
if (!map.has(el)) {
const dup = [...array].reduce((count, data) => (data === el ? count + 1 : count), 0);
map.set(el, dup);
}
});
ํ์ง๋ง ์ต๋น๊ฐ์ด ์ฌ๋ฌ ๊ฐ์ธ์ง ์ฒดํฌํ๋ ๊ณผ์ ์์ ๋ชจ๋ ํ
์คํธ ์ผ์ด์ค๋ฅผ ํต๊ณผํ์ง ๋ชปํ๋ค ๐..
๊ทธ๋๋ ์ด ๊ณผ์ ์์ ์๋ก์ด ์ค๋ณต ํ์ธ ๋ฐฉ๋ฒ์ ์๊ฒ ๋์๋ค!
์ผ๋จ ํต๊ณผํ ์ฝ๋๋ ์ด๋ ๋ค.
function solution(array) {
let map = new Map();
if (array.length === 1) {
return array[0];
}
// Map ๊ฐ์ฒด ์ด๊ธฐํ
for (let i = 0; i <= Math.max(...array); i++) {
map.set(i, 0);
}
for (let i = 0; i < array.length; i++) {
map.set(array[i], map.get(array[i]) + 1);
}
const arr = Array.from(map.values());
const max = Math.max(...arr);
// ์ต๋๊ฐ์ด ํ๋๋ง ์๋ค๋ฉด max, ์ฌ๋ฌ ๊ฐ ์ค๋ณต๋๋ค๋ฉด -1 ์ถ๋ ฅ
if (arr.indexOf(max) !== arr.lastIndexOf(max)) {
return -1;
} else {
return arr.indexOf(max);
}
}
- ๋จผ์ ๋ฐฐ์ด์ ๊ธธ์ด๊ฐ 1์ธ ๊ฒฝ์ฐ์๋ ๋ฐ๋ก ๊ทธ ๊ฐ์ ๋ฐํํ๋๋ก ํ๋ค.
- ๋ฐฐ์ด์ ์ต๋๊ฐ๋งํผ Map์ ์ด๊ธฐํํ๋ค. (์ด๊ธฐํํ์ง ์๋ ๊ฒฝ์ฐ์๋ NaN์ด ๋๋ฉฐ ๊ฐ์ด ์ ๋๋ก ๋์ ๋์ง ์๋๋ค ๐ค)
- ์ํํ๋ฉฐ Map์ ๋น๋์๋ฅผ ์ ๋ฐ์ดํธ
- Map์ ๊ฐ ๋ถ๋ถ๋ง ๋ฐฐ์ด๋ก ๋ฐํํ์ฌ ์ต๋น๊ฐ ์ฐพ์๋๊ธฐ
- ๊ฐ ๋ถ๋ถ์ ๋ฐฐ์ด(arr)์์ ์ต๋น๊ฐ์ด ์ฌ๋ฌ ๊ฐ๋ผ๋ฉด -1, ์๋๋ผ๋ฉด ์ต๋น๊ฐ์ ํด๋นํ๋ ์์ ๋ฐํํ๊ธฐ
์๋กญ๊ฒ ์๊ฒ ๋ ๊ฒ
๋ฐฐ์ด์์ ์ธ๋ฑ์ค๋ค์ ์ผ์น๋ฅผ ๋ฐ์ ธ ์ค๋ณต ์ฌ๋ถ๋ฅผ ์ฒดํฌ
if (arr.indexOf(max) !== arr.lastIndexOf(max)) {
return -1;
} else {
return arr.indexOf(max);
}
[1,1,2,2]
์ ์ต๋น๊ฐ ๋ฐฐ์ด์์ ์ต๋๊ฐ์ธ 2์ ์ธ๋ฑ์ค๋ฅผ ๋ฐ์ ธ๋ณด์์ ๋,
์์์๋ถํฐ ๋ฐ์ง๋ arr.indexOf(max)
๋ 2, ๋ค์์ ๋ถํฐ ๋ฐ์ง๋ arr.lastIndexOf(max)
๋ 3์ด๋ค.
๊ณ ๋ก ์ธ๋ฑ์ค๊ฐ ์ผ์นํ์ง ์์ผ๋ ์ค๋ณต์ด๋ผ๋ ๋ง์..
Map ํ์ฉ
์๊ณ ๋ง ์์๋ Map์ ์จ์ ํ์ด๋ณธ ๊ฒ์ ์ฒ์์ด์๋ค!
Map์ Set๊ณผ ํจ๊ป ๋น๊ต๊ฐ ๋ง์ด ๋๋ ์๋ฃ๊ตฌ์กฐ์ธ๋ฐ, ํค-๊ฐ์ผ๋ก ์ ์ฅํ ์ ์๋ ์๋ฃ๊ตฌ์กฐ๋ค. (Set์ ์ค๋ณต์ ์์ค๋ค)
๊ฐ์ฒด(Object)๋ ๋ญ๊ฐ ๋ค๋ฅธ๊ฐ? ์ถ์๋ฐ ์ผ๋จ ์ด๋ค ๊ฐ์ด๋ ํค๋ก ๊ฐ์ง ์ ์๋ค.
๊ทธ๊ฒ์ ๊ฐ์ฒด๋ ํค๊ฐ ๋ ์ ์๋ค๋ ๊ฒ!..
๋ ํค-๊ฐ์ ๋น๋ฒํ ์ถ๊ฐ, ์ญ์ ์ Map์ด ๋ ์ต์ ํ๋์ด ์๋ค.
map.set(key, value); // ํค๋ก ๊ฐ ์ ์ฅ
map.get(key) // ํค ๊ฐ ๋ฐํ
map.has(key) // ํค๊ฐ ์๋์ง์ ์ฌ๋ถ๋ฅผ boolean์ผ๋ก ๋ฐํ
map.delete(key) // ํค ์ญ์
map.clear() // ๋ชจ๋ ์์ ์ญ์
map.size() // ๊ฐ์ ๋ฐํ
๊ทธ๋ฆฌ๊ณ ์ ์ฉํ ๋ฉ์๋๋ ์์ฑ์ด ๋ง์ ํธ..
์ํผ ์ด๋ ๊ฒ ๋ฌธ์ ํด๊ฒฐ... ๋ ๋ฒจ 0์ธ๋ฐ ์์ง์ ๋์๊ฒ ๊ฝค.. ๊ฝค... ์ด๋ ค์ ๋ค. ๐
'๐ Algorithm' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Javascript] ํ๋ก๊ทธ๋๋จธ์ค : ์์ฐ (0) | 2022.12.09 |
---|---|
[JavaScript] ํ๋ก๊ทธ๋๋จธ์ค : ๋ฐฐ์ด ํ์ ์ํค๊ธฐ (2) | 2022.12.02 |
์๊ณ ๋ฆฌ์ฆ์ ์๊ฐ๋ณต์ก๋์ Big-O (3) | 2022.04.29 |
[JS] ์๊ณ ๋ฆฌ์ฆ : ๋๋ฌด ๊ทธ๋ฆฌ๊ธฐ (๋ณ์ฐ๊ธฐ) (0) | 2022.04.18 |
[JS] ์๊ณ ๋ฆฌ์ฆ : ์ผ๊ณฑ ๋์์ด (0) | 2022.04.15 |
Comment