[JS]_daily coding #17

seul_·2022년 6월 16일
0

Algorithm

목록 보기
16/31

코플릿 데일리 코딩 16_isIsogram


수도코드

  1. 문자열을 입력받아 알파벳을 한번씩만 이용해서 만든 단어인지 여부를 boolean값으로 리턴
  2. 빈문자열을 입력받은 경우 return true
  3. 대소문자 구분없이 판별해야 함 -> 입력받은 문자열을 한가지 형태(대문자나 소문자)로 통일 newStr
  4. 반복문을 순회하기 전에 'str[0]+ str[1] + ... str[i-1]'를 담아주게될 변수beforeStr를 선언해주고 newStr[0]을 담아준다.
  5. 반복문을 돌면서 'str[0]+ str[1] + ... str[i-1]'str[i]가 포함되었는지 여부를 판단해야 함 includes()
    5-1. beforeStr.includes(str[i])가 참일 경우에는 알파벳이 중복되어 사용된 문자열이기 때문에 바로 false를 반환해줌
    5-2. 조건문에 해당하지 않는 경우는 beforeStr에 str[i]를 더해준다.
  6. 조건에 해당한 경우가 없어서 반복문을 빠져나오면 true를 반환한다.

첫번째 코드

string 메서드인 includes()를 이용해서 풀었다.

function isIsogram(str) {
  if(str.length === 0) {
    return true
  }
  
  const newStr = str.toUpperCase();
  let beforeStr = newStr[0];

  for (let i = 1; i < newStr.length; i++) {
    if(beforeStr.includes(newStr[i])) {
      return false  
    }
    beforeStr += newStr[i]
  }
  return true
}

두번째 코드

레퍼런스 코드를 살펴보니, 객체의 키를 이용해서 풀었다. 빈 객체를 선언해준다음, 반복문 안에서 객체에 문자열의 i번째 요소를 키로한 값이 있는지 여부를 판별한다.

function isIsogram(str) {
  if (str.length === 0) {
    return true;
  }

  let cache = {}; //빈 객체를 생성 
  let strLowered = str.toLowerCase(); //입력받은 문자열을 소문자로 

  for (let i = 0; i < strLowered.length; i++) {
    if (cache[strLowered[i]]) {//조건에 해당하는 경우(키값이 true인 경우 바로 false 리턴) 
      return false;
    } 
    //cache라는 배열에 strLowered[i]의 키값이 없으면 undefined(falshy)여서 다음줄로 넘어감
    cache[strLowered[i]] = true; // 해당 키값으로 true를 넣어준다. 
  }
	//중복되는 키값이 없어서 반복문을 모두 순회하고 빠져나온 경우 true를 반환한다. 
  return true;
}
profile
Connecting dots

0개의 댓글