-
[알고리즘/자바스크립트] 최소값 구하기 / 단어 중 가장 길이가 짧은 단어의 length를 구하기 (Shortest Word)Algorithm 2019. 2. 17. 11:59
-해당 문제는 codewars사이트의 level7 문제입니다.(1~8단계 중 8단계가 가장 쉬운 레벨)-
[문제] Simple, given a string of words, return the length of the shortest word(s).
String will never be empty and you do not need to account for different data types.
Test.describe("Example tests",_=>{
Test.assertEquals(findShort("bitcoin take over the world maybe who knows perhaps"), 3);
Test.assertEquals(findShort("turns out random test cases are easier than writing out basic ones"), 3);
});
[해석] 어떤 단어의 나열들이 주어졌을 때 그 단어들 중 가장 길이가 짧은 단어의 length를 return해라.
만약에 주어진 문장이 "bitcoin take over the world maybe who knows perhaps"라면 가장 길이가 짧은 단어는 the, who이므로
이 단어들의 length인 3이 return되어야 한다.
내가 푼 답은 다음과 같다.
function findShort(s){ var wordArr = s.split(' '); var min = wordArr[0].length; for(var word of wordArr) { if(word.length < min) { min = word.length; } } return min; }
일단 s로 받은 단어의 나열을 공백을 기준으로 자른다. ( split() 함수로 )
그러면 공백 기준으로 잘려진 단어들이 배열로 만들어지는데,
그 배열의 제일 첫번째 숫자 하나를 초기값으로 설정해둔다.
이제 배열에 있는 단어의 길이를 초기값과 비교해서 초기값보다 작은 경우에
min을 그 작은 값으로 교환한다.
그러면 반복이 다 끝나고 나면 가장 작은 수가 min값에 들어가게 된다.
그 때의 min값을 return하면 끝!
짝짝짝!
베이직 테스트는 4ms만에 연산되었고
45개의 랜덤 테스트는 6ms만에 연산되었다.
+ 추가(190217)
function findShort(s){ var word = s.split(' '); var min = word[0].length; for(var i=1; i<word.length; i++) { if(word[i].length < min) min = word[i].length; } return min; }
생각해보니 초기값으로 배열의 0번째 요소의 길이를 잡았으니
for문 돌릴 때 0번째 요소는 검사할 필요가 없다!
그래서 for-of문으로 돌렸던걸 for문으로 바꾸고
i=0이 아닌 i=1부터 시작하였다.
- - - - - - - - - - -
이거 말고 또 생각한 다른 방식의 풀이가 있는데,
다음과 같다.
function findShort(s){ var wordArr = s.split(' '); var arr = []; for(var word of wordArr) { arr.push(word.length) } arr.sort((l,r) => { return l-r; }) return arr[0]; }
먼저 단어들을 split하고 그 단어들의 길이로 새로운 배열 arr을 만든다.
그리고 그 배열을 sort()함수로 오름차순 정렬하면 그 배열의 0번째 값이 가장 작은 수가 된다.
근데 이 방법은 for문을 돌려서 배열을 1차로 만들고, 또 sort함수로 오름차순을 정렬해야하니
반복을 2번이나 해야하므로 위의 코드보다 효율성이 떨어진다.
테스트는 통과하였지만
45개의 랜덤 테스트 결과 첫번째 코드는 실행시간이 6ms였지만
두번째 코드는 실행시간이 7ms로 증가하였다.
테스트 케이스가 더 많아지면 처리 속도는 더더욱 차이가 커질테니
첫번째 코드를 사용하는 것이 더 좋겠다.
반응형'Algorithm' 카테고리의 다른 글
[알고리즘/자바스크립트] 삼각형 판별문제 (Is this a triangle?) (0) 2019.02.18 [알고리즘/자바스크립트] 완벽한 제곱근 구하기 (Find the next perfect square!) (0) 2019.02.18 [알고리즘/자바스크립트] 마지막 4글자 제외하고 #으로 치환하기 (Credit Card Mask) (0) 2019.02.17 [알고리즘/자바스크립트] 특정문자 공백으로 치환해서 return하기 (Dubstep) (252) 2019.02.17 [알고리즘/자바스크립트] 약수 구하는 알고리즘 (Find the divisors!) (127) 2019.02.17 COMMENT