알고리즘

Daily Coding 16. isIsogram

디디 ( DD ) 2023. 2. 6. 09:30

Q. (공백이 없는 알파벳) 문자열을 입력받아 아이소그램인지 여부(boolean 타입)를 리턴해야 합니다. 아이소그램(isogram)은 각 알파벳을 한번씩만 이용해서 만든 단어나 문구를 말합니다.

 

 

//첫 번째 풀이

function isIsogram(str) {
  if(str === '') {  //빈 문자열을 입력받은 경우, true를 리턴.
    return true;
  }
  for(let i = 0; i < str.length; i++) {
    for(let j = 0; j < str.length; j++) {
      if(i !== j && str[i].toUpperCase() === str[j].toUpperCase()){  //대소문자 구분 X
        return false;
      } else {return true;}
    }
  }
}

 이렇게 푸니까 전부 true로 나왔다. i !== j 부분을 지우면 또 다 false로 나온다. 

 

 

//두 번째 풀이

function isIsogram(str) {
  if(str === '') {  //빈 문자열을 입력받은 경우, true를 리턴.
    return true;
  }
  for(let i = 0; i < str.length; i++) {
    for(let j = 0; j < str.length; j++) {
      if(i !== j && str[i].toUpperCase() === str[j].toUpperCase()){  //대소문자 구분 X
        return false;
      }
    } 
  }
  return true;
}

 고민을 하다가 내가 의도한 대로 코드를 쓰려면 이중 반복문을 통해 false를 거른 후, 그 밖에 나머지 true가 나오게 하는 것이 맞을 것 같았다. 이렇게 작성하니 테스트가 통과되었다. 

 

 

//더 깔끔하게 작성해 보기

function isIsogram(str) {
  str = str.toUpperCase();  //대소문자 구분 X
  for(let i = 0; i < str.length; i++) {
    for(let j = i + 1; j < str.length; j++) {
      if(str[i] === str[j]){
        return false;
      }
    } 
  }
  return true;  //빈 문자열을 입력받은 경우도 여기 포함됨.
}