🗃️javascript/코테 프레임 문제

1-14 가장 긴 문자열(△)

하얀성 2024. 4. 10. 20:55
<질문>
문자열은 배열로 간주해서 인덱스를 쓸 수 있는걸로 아는데 배열에서는 되는데 문자열에서는 안되는게 있다.
어떻게 구분할까?

<대답>
 
문자열의 불변성을 헤치지 않았다면 문자열의 메소드 기능은 다 사용 가능하다. 
즉, 불변성을 헤치는 메소드는 배열에서만 사용가능
 

 

원본 문자열은 직접 수정할 수 없다는 특징이 있습니다.

문자열은 자바스크립트에서 불변(immutable)이기 때문에, 한 번 생성된 문자열의 내용을 직접 변경할 수 없습니다.

만약 문자열을 수정해야 한다면, 수정된 내용을 반영한 새로운 문자열을 생성해야 합니다.

 

반면에, 배열은 가변(mutable)이므로, 원본 배열 자체를 직접 수정할 수 있습니다.

그래서 문자열을 바꿀일이 있으면 문자열에서 배열로 변경 한 뒤, 수정해서 다시 문자열로 돌려 사용하는 패턴을 자주 사용합니다.

 

즉, 불변성을 헤치지 않는 문자열의 메소드 기능은 다 사용 가능하다.


<제출 답안>

function solution(s) {
  let answer = [];
  [...s].forEach((x) => {
    if (x.split("").length > answer.length) answer = x;
  });
  return answer;
}
let str = ["teacher", "time", "student", "beautiful", "good"];
console.log(solution(str));

 

위의 내용을 잘 몰라서 문자열을 조회만 했지만, 배열로 돌리려 한 모습을 확인할 수 있다.

그리고 이미 s매개변수를 배열로 받았기 때문에 스프레드로 잘못 받아준 상태이다.

답 저장 내용도 문자열로 선언해야 한다.

 

<수정 후>

function solution(s) {
  let answer = "";
  s.forEach((x) => {
    if (x.length > answer.length) answer = x;
  });
  return answer;
}
let str = ["teacher", "time", "student", "beautiful", "good"];
console.log(solution(str));