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; //빈 문자열을 입력받은 경우도 여기 포함됨.
}
'알고리즘' 카테고리의 다른 글
| 그래프(Graph) (0) | 2023.09.26 |
|---|---|
| 버블 정렬, 선택 정렬, 삽입 정렬 (0) | 2023.09.11 |
| Daily Coding 15. modulo (0) | 2023.02.03 |
| Daily Coding 06. letterCapitalize (0) | 2023.01.25 |
| Daily Coding 05. firstReverse (0) | 2023.01.25 |
댓글