Code Wars Kata "Replace With Alphabet Position"
Image source: https://www.klipfolio.com/blog/algorithm-in-six-steps
문제
주어진 문자열의 모든 문자를 alphatbet 순서로 replace 하시오.
text
안에 문자가 아닌 것들은 무시하고, 리턴하지 마시오.
예) "a" = 1, "b" = 2, etc.
// Example
alphabetPosition("The sunset sets at twelve o' clock.")
Should return "20 8 5 19 21 14 19 5 20 19 5 20 19 1 20 20 23 5 12 22 5 15 3 12 15 3 11" (as a string)
나의 답
function alphabetPosition(text) {
let newText = '';
for(let letter of text) {
newText += letter.toUpperCase();
}
let result = "";
for(let i = 0; i < newText.length; i++) {
let asciiCode = newText.charCodeAt(i);
if(asciiCode >= 65 && asciiCode <= 90) {
result = result + " " + (asciiCode - 64);
}
}
return result.substring(1, result.length);
}
이전에 코드스테이츠 코플릿 문제에서 알파벳관련 문제가 나와, 그 때는 알파벳들을 쭉 나열해 놓고 인덱스를 골라서 썼었는데, 오늘은 다른 방법으로 풀고 싶어서 아스키 코드를 이용해 풀어보았다. 일단 저번에 내 방법보다는 좋아서 약간 뿌듯해 질려고 했는데, 다른 분들 답을보고 경악을 했다..
Best Solution #1
정규표현식/[a-z]/
로 알파벳만 match
시키고 gi
를 이용하여 case insensitive를 만들고, map()으로 아스키코드 매칭... 그냥... 미친 것 같다.
function alphabetPosition(text) {
return text
.toUpperCase()
.match(/[a-z]/gi)
.map( (c) => c.charCodeAt() - 64)
.join(' ');
}
Best Solution #2
function alphabetPosition(text) {
var result = "";
for (var i = 0; i < text.length; i++){
var code = text.toUpperCase().charCodeAt(i)
if (code > 64 && code < 91) result += (code - 64) + " ";
}
return result.slice(0, result.length-1);
}
내 로직과 비교하면?
두번째 로직을 보니, 내가 썼던 답과 로직은 다르지 않았다. 다만, 내 것은 답은 나왔지만 패착이 하나 있었는데, toUpperCase()
메소드 기능을 정확히 숙지 하지 못한 것. 이 메소드는 text.toUpperCase()
이렇게 한번만 써줬어도 됐던 거였는데, 나는 이걸 반복문으로...😫
이것 하나로 시간복잡도가 벌써 두배로 늘어났기 때문에 메소드의 기능을 정확히 숙지해야겠다는 생각을 하게 됐다.
첫번재 로직은 정규표현식(regex)사용으로 인해 나에게 새로운 눈을 열어 준 것 같다. 나중에 알고보니 이 로직에서 정규표현식을 .match(/[A-Z]/g)
라고 써도 된다는 걸 알게 됐는데(아예 처음부터 대문자로 매칭), 이게 다 첫번째 로직 덕분이다... 하하
재밌었다!
2020.11.27에 추가: 나중에 알게된 사실인데, 정규표현식(regex)보다, if문으로 charCodeAt()을 써서 구별해서 작성하는 것이 성능면에서는 훨씬이득이라고 한다. 정규표현식이 대략 50% 느리다고 한다.
문제 출처 : www.codewars.com
Author And Source
이 문제에 관하여(Code Wars Kata "Replace With Alphabet Position"), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@srparkgogo/Code-Wars-Kata-Replace-With-Alphabet-Position저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)