Find the odd int

ํ™€์ˆ˜ ๋ฒˆ ๋‚˜ํƒ€๋‚˜๋Š” ์ •์ˆ˜ ์ฐพ๊ธฐ

Codewars Link

๋ฌธ์ œ

์ฃผ์–ด์ง„ ๋ฐฐ์—ด์—์„œ, ํ™€์ˆ˜ ๋ฒˆ ๋‚˜ํƒ€๋‚˜๋Š” ์ •์ˆ˜๋ฅผ ์ฐพ์•„์ฃผ์„ธ์š”. ๋‹จ, ํ™€์ˆ˜ ๋ฒˆ ๋‚˜ํƒ€๋‚˜๋Š” ์ •์ˆ˜๋Š” ํ•ญ์ƒ ํ•œ๊ฐœ๋ฟ์ž…๋‹ˆ๋‹ค.

์˜ˆ๋ฅผ๋“ค์–ด, [1, 1, 1, 1, 10] ์—์„œ 1์€ 4๋ฒˆ ๋‚˜ํƒ€๋‚˜๊ณ , 10์€ 1๋ฒˆ ๋‚˜ํƒ€๋‚˜๋ฏ€๋กœ, ํ™€์ˆ˜ ๋ฒˆ ๋‚˜ํƒ€๋‚˜๋Š” ์ •์ˆ˜๋Š” 10 ์ž…๋‹ˆ๋‹ค.

// @param { Array } n

function findOddInt (n) {
    //happy coding!
}

๋ฌธ์ œ ์ดํ•ด

์ •ํ™•ํ•œ ์ดํ•ด๋ฅผ ์œ„ํ•ด ํ…Œ์ŠคํŠธ ์ธ์ž๋ฅผ ํ™•์ธํ•ด ๋ณด์ž

expect(findOddInt([20,1,-1,2,-2,3,3,5,5,1,2,4,20,4,-1,-2,5])).to.eql(5);

expect(findOddInt([9])).to.eql(9);

expect(findOddInt([1, 1, 1, 1, 1, 1, 3, 3, 3])).to.eql(3);

expect(findOddInt([5, 6, 4, 6, 5, 7, 1, 5, 7, 6, 5, 7, 6, 4, 1])).to.eql(7);

ํŠน๋ณ„ํžˆ ๋” ์š”๊ตฌํ•˜๋Š” ์‚ฌํ•ญ์€ ์—†๋‹ค. ๋ฐฐ์—ด์—์„œ ๋“ค์–ด์˜ค๋Š” ์ˆซ์ž์ค‘ ๋ฐ˜๋ณต ํšŸ์ˆ˜๊ฐ€ ์ •ํ™•ํžˆ ํ™€์ˆ˜์ธ ์›์†Œ๋ฅผ ์ฐพ๋Š”๋‹ค.

ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•

  1. ์›์†Œ๋งˆ๋‹ค์˜ ๋“ค์–ด๊ฐ„ ํšŸ์ˆ˜๋ฅผ ์ฒดํฌํ•˜๋Š”๋ฐ ์ด์ „์— ์ฒดํฌํ•œ ์›์†Œ์ธ์ง€ ์ •ํ™•ํ•˜๊ฒŒ ํŒ๋‹จํ•œ๋‹ค.

  2. ์ฒดํฌํ•œ ์›์†Œ๋Š” ๋”ฐ๋กœ ๋ฐฐ์—ด์— ๋‹ด๋Š”๋‹ค.

  3. ํ™€์ˆ˜ ๊ฐœ์ˆ˜์ธ์ง€ ์ฒดํฌ

  4. ๋งž๋‹ค๋ฉด return

์ฝ”๋“œ ๊ตฌํ˜„

function findOddInt (n) {
  let newN = [];
  let overlap = false;
  let count = 1;
  let answer;

  n.forEach((num, idx) => {

    // ์ด์ „ ์ฒดํฌํ•œ ์ˆซ์ž์ธ์ง€ ์ฒดํฌํ•œ๋‹ค.
    for (let newNum of newN) {
      if (num === newNum) {
        overlap = true;
        break;
      }
      overlap = false;
    }

    // ์ด์ „์— ์ฒดํฌํ•œ ์ˆซ์ž๊ฐ€ ์•„๋‹ˆ๋ผ๋ฉด, 
    if (!overlap || idx === 0) {
      newN.push(num);

      // num ์˜ index ๋‹ค์Œ์ž๋ฆฌ๋ถ€ํ„ฐ ๊ฐœ์ˆ˜๋ฅผ ์ฒดํฌ
      for (let checkNum = (idx + 1); checkNum < n.length; checkNum++) {
        if (n[checkNum] === num) {
          count++;
        }  
      }

      // ํ™€์ˆ˜ ๊ฐœ์ˆ˜์ธ์ง€ ์ฒดํฌ
      if (count % 2 === 1) {
        answer = num;
      }

    }
    //count ๋ฆฌ์…‹
    count = 1;
  });

  return answer;
}

๊ฒฐ๊ณผ ๋ถ„์„

๋žœ๋คํ…Œ์ŠคํŠธ ํ†ต๊ณผ

harms280, ChingChangChong, oscar6654, aaronbulnes, ghismovd, Jaykobee's Codewars Solution

function findOddInt(A) {
  var obj = {};
  A.forEach(function(el){
    obj[el] ? obj[el]++ : obj[el] = 1;
  });

  for(prop in obj) {
    if(obj[prop] % 2 !== 0) return Number(prop);
  }

์ƒˆ๋กœ์šด ๋ฐฐ์—ด์„ ๋งŒ๋“ค์–ด์„œ findOddInt ํ•จ์ˆ˜์˜ ์ธ์ž ๋ฐฐ์—ด์—์„œ ์›์†Œ๊ฐ€ key๊ฐ€ ๋˜๊ณ  ๊ทธ key์˜ ๊ฐœ์ˆ˜๊ฐ€ value๊ฐ€ ๋œ๋‹ค. ์ „๋ถ€๋‹ค ๋‹ด๊ฒŒ ๋˜๋ฉด value๊ฐ’์ด ํ™€์ˆ˜์ธ key๋ฅผ ๋ฆฌํ„ดํ•ด ์ค€๋‹ค.

Unnamed, classic016, Fantom1991, TroyMaeder, saiful_coder, dany.dlinker's Codewars Solution

const findOdd = (xs) => xs.reduce((a, b) => a ^ b);

์ด๊ฑฐ์Šจ.. (https://developer.mozilla.org/ko/docs/Web/JavaScript/Reference/Operators/Bitwise_Operators#Bitwise_XOR) ๊ด€ํ•œ solution์ธ๋ฐ ์•„์ง ์ž˜ ๋ชจ๋ฅด๊ฒ ๋‹ค.

Last updated

Was this helpful?