알고리즘
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; //빈 문자열을 입력받은 경우도 여기 포함됨.
}