[JavaScript] ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค : ์ตœ๋นˆ๊ฐ’ ๊ตฌํ•˜๊ธฐ
728x90

 

 

๋ฌธ์ œ

์ตœ๋นˆ๊ฐ’์€ ์ฃผ์–ด์ง„ ๊ฐ’ ์ค‘์—์„œ ๊ฐ€์žฅ ์ž์ฃผ ๋‚˜์˜ค๋Š” ๊ฐ’์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค. ์ •์ˆ˜ ๋ฐฐ์—ด 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์ธ๋ฐ ์•„์ง์˜ ๋‚˜์—๊ฒ ๊ฝค.. ๊ฝค... ์–ด๋ ค์› ๋‹ค. ๐Ÿ˜‡

 

 

728x90