[ 문제 ]
아주 간단한 문제이다.
문제 그대로 입력받은 문자열을 공백 한 칸으로 구분하여 첫글자로만 이루어진 문자열을 반환하는 문제이다.
입출력 예시를 보면 'hello world'를 입력받으면 앞글자인 'h'와 'w'만 합쳐서 'hw'를 반환하는 것이다.
[ 풀이 ]
나의 로직은 다음과 같다.
1/ 빈 문자열을 받으면 빈 문자열을 반환한다.
2/ 띄어쓰기를 기준으로 나눈 문자열을 배열로 만든다.
2/ let result = ""를 먼저 선언하고, 반복문을 이용하여 첫 글자만 result에 계속 붙여준다.
function firstCharacter(str) {
if(str ===""){ //빈 문자열을 입력받으면, 빈 문자열을 반환한다.
return "";
}
let arr = str.split(" "); //띄어쓰기를 기준으로 문자열을 나눠서 배열로 만든다.
let result = "";
for(let i = 0; i < arr.length; i++){ //반복문을 이용하여 result에 첫글자를 포함시킨다.
result = result + arr[i][0];
}
return result; //result값을 반환한다.
}
고백하자면, 처음에 빈 문자열을 입력받았을 때를 고려하지 않아 아래의 코드를 입력하지 않았다.
if(str ===""){ //빈 문자열을 입력받으면, 빈 문자열을 반환한다.
return "";
}
그랬더니, 빈 문자열을 입력받으면 result값이 "undefined" 이렇게 문자열 형태가 나오는 것이다.
undefined이면 undefined이지, 왜 문자열 형태의 "undefined"가 나올까?
신기해서 하나하나 다시 뜯어보았다.
function firstCharacter(str) {
let arr = str.split(" "); //str이 "",즉 빈문자열이면 arr은 [""]이렇게 빈문자열이 요소인 길이 1의 배열이 된다.
let result = "";
for(let i = 0; i < arr.length; i++){
result = result + arr[i][0]; //arr[0]은 "", 여기에 0번째 문자열인 arr[0][0]은 undefined가 된다.
} //즉, result = "" + undefined가 된다. 그럼 에러가 나지 않고, "undefined" 즉, undefined가 문자열 형태가 된다...!
return result; //"undefined"
}
정말 신기한게 ""+undefined, 즉, 문자열 + undefined를 하게되면 에러가 나는 것이 아니라 undefined가 그냥 문자열로 바뀌어버린다.
쉽지 않은 자바스크립트의 세계....!
[ 레퍼런스 ]
레퍼런스도 변수명만 조금씩 다르고 거의 동일하다!
'자료구조알고리즘 > 코드스테이츠 Coplit' 카테고리의 다른 글
06_letterCapitalize (0) | 2022.02.09 |
---|---|
05_firstReverse (0) | 2022.02.09 |
03_powerOfTwo (0) | 2022.02.05 |
02_computeWhenDouble (0) | 2022.02.04 |
01_transformFirstAndLast (0) | 2022.02.02 |