일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- 클라이언트
- 리액트
- 연습
- 코딩
- this
- nqueens
- 알고리즘
- grpahQL
- 공부
- Instantiation Patterns
- 자바스크립트
- 취업
- underscores
- 개발
- ftech
- 해커톤
- 코드스테이츠
- array
- react
- 제일어려워
- 포스기
- DOM
- underbar
- method
- JS
- JavaScript
- vscode
- 엔퀸즈
- 초보
- 일상
- Today
- Total
analogcoding
algorithm 연습5 본문
문제. 인자로 받는 문자열이 각기 다 다른 알파벳으로 이루어져있다면 true , 중복된 알파벳이 있으면 false를 리턴.
Ex) input : "Dermatoglyphics" => output : true
input : "aba" / "moOse" => output : false
해결방안.
1. input 값의 대소문자 상관없이 구분.
2. 각 글자들을 비교해서 중복된 글자가 있는지 확인.
3. Boolean 값 리턴.
첫 번째 솔루션.
underscore 에 uniq함수를 활용해서 해결한 솔루션.
input값을 대소문자 구분없이 만들고 배열로 나눠준다. 하나 씩 값을 넣어서 비교를 위한 빈 배열을 생성한다.
var isIsogram = function(str) {
str = str.toLowerCase();
str = str.split('')
var check = [];
var result = false;
for문과 if문을 이용해서 각 글자를 새 배열에 넣어주고 그 배열에 includes() 메소드를 사용해서 안에 값이 없을 때만 추가해준다.
그렇게 추가한 새 배열의 길이가 기존 input을 나눈 배열과 같다면 중복된 글자가 없는 것이고 더 적다면 중복된 글자는 제외하고
추가된 것이기에 중복이 있는 것을 판단한다.
for(let i = 0 ; i < str.length; i++){
if(!check.includes(str[i])){
check.push(str[i]);
if(check.length === str.length){
result = true;
}
}
}
return result;
}
결과확인
두 번째 솔루션.
대소문자 구분 , 각 배열로 나누어준 뒤 every()함수를 써서 각 요소를 indexOf() 와 lastIndexOf의 린턴 값으로 비교해서 중복이 있다면
'avcda' 에 a가 indexOf 에선 0 , lastIndexOf에선 4 로 리턴되고 'avcda' 에 v는 indexOf 에선 1 , lastIndexOf에서도 1 로 리턴된다.
그렇기 때문에 모든 요소의 indexOf 와 lastIndexOf의 값이 모두 같다면 true 를 리턴하고 아니면 false를 리턴한다.
var isIsogram = function(str) {
var arr = str.toLowerCase().split('');
return arr.every(function(char){
return arr.indexOf(char) === arr.lastIndexOf(char);
});
}
결과확인
두 번째 솔루션은 다른 분께서 제시해주신 방법이다. 굉장히 효율적이고 every와 indexOf , lastIndexOf 를 잘 사용한 예제라서
굉장히 좋은 코드인 것 같다. 첫 번째 솔루션의 경우 underscore를 연습한 보람이 느껴지는 코드였다.
'Study JS for me > Algorithm' 카테고리의 다른 글
algorithm 연습7 (0) | 2019.04.28 |
---|---|
algorithm 연습6 (0) | 2019.04.28 |
algorithm 연습4 (0) | 2019.04.27 |
algorithm 연습3 (0) | 2019.04.26 |
algorithm 연습2 (0) | 2019.04.26 |