๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
๐Ÿ“‚ Base/์•Œ๊ณ ๋ฆฌ์ฆ˜

์•„์ด์†Œ๊ทธ๋žจ์ธ์ง€ ์—ฌ๋ถ€๋ฅผ ๋ฆฌํ„ดํ•˜๊ธฐ

by Dev. Ella 2023. 4. 5.

๐Ÿ“œ ๋ฌธ์ œ

๋ฌธ์ž์—ด์„ ์ž…๋ ฅ๋ฐ›์•„ ์•„์ด์†Œ๊ทธ๋žจ์ธ์ง€ ์—ฌ๋ถ€๋ฅผ ๋ฆฌํ„ดํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์•„์ด์†Œ๊ทธ๋žจ(isogram)์€ ๊ฐ ์•ŒํŒŒ๋ฒณ์„ ํ•œ๋ฒˆ์”ฉ๋งŒ ์ด์šฉํ•ด์„œ ๋งŒ๋“  ๋‹จ์–ด๋‚˜ ๋ฌธ๊ตฌ๋ฅผ ๋งํ•ฉ๋‹ˆ๋‹ค.

 

โš ๏ธ ์ฃผ์˜์‚ฌํ•ญ

- ๋นˆ ๋ฌธ์ž์—ด์„ ์ž…๋ ฅ๋ฐ›์€ ๊ฒฝ์šฐ, true๋ฅผ ๋ฆฌํ„ดํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
- ๋Œ€์†Œ๋ฌธ์ž๋Š” ๊ตฌ๋ณ„ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

 

โœ๐Ÿป ๋‚ด ํ’€์ด

function isIsogram(str) {
  // ๋Œ€์†Œ๋ฌธ์ž ๊ตฌ๋ถ„์„ ์—†์• ๊ธฐ ์œ„ํ•ด ๋ฌธ์ž๋ฅผ ์†Œ๋ฌธ์ž๋กœ ๋ฐ”๊ฟ”์ฃผ๋Š” ์ƒˆ๋กœ์šด ๋ฌธ์ž๋ฅผ ํ• ๋‹นํ•˜๋Š” ๋ณ€์ˆ˜
  let newStr = str.toLowerCase();
    // true์™€ false๋ฅผ ๋‚˜ํƒ€๋‚ผ์ˆ˜ ์žˆ๋Š” result๋ณ€์ˆ˜๋ฅผ ์„ ์–ธ
    let result = true;

  // str์˜ ๊ธธ์ด๊ฐ€ 0์ด๋ฉด
  if(str.length === 0){
    // result = true๋ฅผ ๋ฐ˜ํ™˜
    return result;
  }
  
  for(let i = 0; i<newStr.length; i++){
    // ๋‘ ๋ฒˆ์˜ ๋ฐ˜๋ณต๋ฌธ์„ ๋Œ๋ฆฌ๋‹ค (j๋Š” i์™€ ๊ฒน์น˜์ง€ ์•Š๊ฒŒ +1)
    for (let j = i+1; j < newStr.length; j++){
      // i์™€ j๊ฐ€ ๊ฐ™๋‹ค๋ฉด ๊ฐ™์€ ๋ฌธ์ž๊ฐ€ ์žˆ๋Š” ๊ฒƒ์ด๋ฏ€๋กœ
      if (newStr[i] === newStr[j]){
        // false๋ฅผ ๋ฆฌํ„ด
        result =  false;      
      } 
    }
  }
  return result;
};

 

โœ๐Ÿป ๋˜ ๋‹ค๋ฅธ ํ’€์ด

function isIsogram(str) {
  // ๋นˆ ๋ฌธ์ž์—ด์„ ์ž…๋ ฅ๋ฐ›์€ ๊ฒฝ์šฐ
  if (str.length === 0) {
    // true๋ฅผ ๋ฆฌํ„ด
    return true;
  }
  // ์•„์ด์†Œ๊ทธ๋žจ์ธ์ง€ ์—ฌ๋ถ€ ํŒ๋‹จ์„ ์œ„ํ•ด ๋นˆ ๊ฐ์ฒด ์„ ์–ธ
  let newStr = {};
  // ๋Œ€์†Œ๋ฌธ์ž ๊ตฌ๋ถ„์„ ์—†์• ๊ธฐ ์œ„ํ•ด ๋ชจ๋‘ ์†Œ๋ฌธ์ž๋กœ ๋ฐ”๊ฟ”์ฃผ๋Š” ๋ณ€์ˆ˜ ํ• ๋‹น
  let strLowered = str.toLowerCase();

  // ๋ฐ˜๋ณต๋ฌธ ๋Œ๋ฆฌ๋ฉด์„œ ๊ฐ์ฒด์— ๋„ฃ์Œ
  for (let i = 0; i < strLowered.length; i++) {
    // ์ด๋ฏธ ๊ฐ์ฒด์— ํ•ด๋‹น ์•ŒํŒŒ๋ฒณ์ด ์žˆ๋‹ค๋ฉด
    if (newStr[strLowered[i]]) {
      // false๋ฅผ early return
      return false;
    }
    // ๊ฐ์ฒด์— ํ•ด๋‹น ์•ŒํŒŒ๋ฒณ์ด ์—†๋‹ค๋ฉด ์ตœ์ดˆ๋กœ ์ž…๋ ฅ๋ฐ›์•„ ๊ฐ’์„ ๋„ฃ๊ณ , ๊ฐ’์˜ value์ธ true๋ฅผ ๋ฆฌํ„ด
    newStr[strLowered[i]] = true;
  }
  // true๋ฅผ ๋ฆฌํ„ด
  return true;
}

 

๐Ÿ‘ฉ๐Ÿป‍๐Ÿ’ป ๋ฐฐ์šด ์ 

์ด ๋ฌธ์ œ์—์„œ๋Š” true/false ์—ฌ๋ถ€๋ฅผ ํŒ๋‹จํ•ด ๋ฆฌํ„ดํ•˜๋Š” ๊ฒƒ์ด๋ฏ€๋กœ, ๋ฐ˜๋ณต๋ฌธ ๋‚ด์—์„œ ์กฐ๊ฑด์— ํ•ด๋‹นํ•œ๋‹ค๋ฉด early return์„ ํ•œ ํ›„, ์ดํ›„ boolean ๊ฐ’์„ ์ตœ์ข…์ ์œผ๋กœ ๋ฆฌํ„ดํ•œ๋‹ค.

๋Œ“๊ธ€