17일차 내장객체 연습문제

워니·2024년 11월 5일

<문제를 풀면서 공부한 것>

< String()toString() >
1. String()
- 주어진 값을 문자열로 변환하는 함수
- 사용 방법 : String(123)은 문자열 "123" 반환
2. toString()
- 객체나 기본 데이터 타입에서 호출할 수 있는 매서드
- 사용 방법 : (123).toString()은 문자열 "123" 반환
3. 차이점
- String()은 문자열로 변환을 위한 함수
  toString()은 객체나 값의 매서드
- String()nullundefined를 각각 nullundefined로 처리
  toString()은 TypeError
  
ex) 예시코드
console.log(String(123)); // "123"
console.log((123).toString()); // "123"

console.log(String(null)); // "null"
console.log(null.toString()); // TypeError: Cannot read properties of null
  
< 문제 2에 대한 GPT 의견 >
- 시간 복잡도 측면에서 단순히 긴 단어를 찾는 것은 sort()보단 reduce()forEach()를
  추천해줌
- 전개 연산자가 메모리 사용을 하기 때문에 큰 문자열인 경우 불필요한 메모리 사용이 발생

Q1.

/*
[문제]
매개변수로 숫자를 전달하면 그 숫자의 역순을 되돌려주는
함수를 만들어주세요.

ex) 32125 -> 52123
    15231 -> 13251 
*/

function reverse_to_number(number) {
//let`s do it
}

let a = reverse_to_number(32125);
console.log(a); // 52123

let b = reverse_to_number(13251);
console.log(b); // 15231
< 나의 문제 풀이 1>
/* 1. */
function reverse_to_number(number) {
  // 숫자를 문자열로 변환
  const str = number.toString(); // 32125
  // console.log(str);
  // 문자열을 배열로 변환
  const arr = [...(str + "")]; // ['3', '2', '1', '2', '5']
  //   console.log(arr);
  // 배열을 순서 변환
  const arrReverse = arr.reverse(); // ['5', '2', '1', '2', '3']
  //   console.log(arrReverse);
  // 배열을 문자열로 변환 (reduce 사용법 더 익혀야 할 듯)
  const arrToString = arrReverse.reduce((acc, cur) => {
    return acc + cur;
  }, 0); // 052123
  //   console.log(arrToString);
  // 문자열을 숫자로 변환
  const result = Number(arrToString);
  //   console.log(typeof result); // number
  return result;
}

let a = reverse_to_number(32125);
console.log(a); // 52123

let b = reverse_to_number(13251);
console.log(b); // 15231
  
< 나의 문제 풀이 2>
/* 1.2 매서드 체이닝을 통해 간략하게 표현 */
function reverse_to_number(number) {
  const result = Number(
    [...(number.toString() + "")].reverse().reduce((acc, cur) => {
      return acc + cur;
    }, 0)
  );
  return result;
}

let a = reverse_to_number(32125);
console.log(a); // 52123

let b = reverse_to_number(13251);
console.log(b); // 15231
< 강사님 문제 풀이 >
const reverse_to_number = (number) =>
  Number(String(number).split("").reverse().join(""));

let a = reverse_to_number(32125);
console.log(a); // 52123

let b = reverse_to_number(13251);
console.log(b); // 15231
  • 강사님의 풀이는 reduce보다 join을 사용하면서 더 깔끔해졌다.
  • toString과 String의 차이에 대해 더 공부할 필요가 있음
  • split도 사용해봐야 익숙해질 것 같다. 더 많은 케이스 만들 필요 있음
  • 화살표 함수 표현에 대해 아직은 익숙치 않은 것 같다.

Q2.

/*
[문제]
  [가장 긴 단어를 출력하기]
  매개변수로 전달된 문장에서 가장 긴 단어를 출력해주세요.
*/
function findLongStr(str) {}

let result = findLongStr("we are the champion");
console.log(result); // champion

let result2 = findLongStr("i`m fine thank you, and you?");
console.log(result2); // thank
< 나의 문제 풀이 >
function findLongStr(str) {
  // 문자열을 구분자로 나눠 배열만들기 (split 사용법 바로 생각 안 남)
  const strToArr = str.split(" ");
  // 인덱스 길이로 순서 정렬하기 (sort 매서드 생각 안 남)
  const arrSort = strToArr.sort((a, b) => b.length - a.length);
  // 맨 앞의 단어 출력하기 (shift 바로 생각 안 남)
  const arrShift = [...arrSort].shift();
  return arrShift;
};
  
let result = findLongStr("we are the champion");
console.log(result); // champion

let result2 = findLongStr("i`m fine thank you, and you?");
console.log(result2); // thank

< 나의 문제 풀이 2 >
const findLongStr = (str) =>
  [...str.split(" ").sort((a, b) => b.length - a.length)].shift();
  
let result = findLongStr("we are the champion");
console.log(result); // champion
  
let result2 = findLongStr("i`m fine thank you, and you?");
console.log(result2); // thank
< 강사님 문제 풀이 >
const findLongStr = (str) =>
  str
    .split(" ")
    .sort((a, b) => b.length - a.length)
    .shift();
  
let result = findLongStr("we are the champion");
console.log(result); // champion
  
let result2 = findLongStr("i`m fine thank you, and you?");
console.log(result2); // thank
  
< 강사님 문제 풀이 2> 
const findLongStr2 = (str) =>
  str
    .split(" ")
    .reduce((acc, cur) => (acc.length > cur.length ? acc : cur), "");
  
let result = findLongStr("we are the champion");
console.log(result); // champion
  
let result2 = findLongStr("i`m fine thank you, and you?");
console.log(result2); // thank 
  • 문자열의 원본을 파괴하지 않고 복사를 하기 위해 전개 연산자를 썼지만,
    강사님의 풀이에서는 그렇지 않았다. 이 부분에 대해서 깊은 이해 없이 사용을 해서
    좀 더 공부가 필요할 듯 하다
  • reduce와 sort를 사용한 두 가지 방법에 대해서 적용을 쉽게 할 수 있도록 연습 필요
profile
첫 시작!

0개의 댓글