본문 바로가기

자료구조알고리즘/코드스테이츠 Coplit

04_firstCharacter

[ 문제 ]

아주 간단한 문제이다.

문제 그대로 입력받은 문자열을 공백 한 칸으로 구분하여 첫글자로만 이루어진 문자열을 반환하는 문제이다.

입출력 예시를 보면 '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