알고리즘 TIL

정승원·2023년 6월 27일
0
post-thumbnail

📒 목차

📌 join()
📌 reverse()
📌 String()/toString()
📌 parseInt() & Number()

📌 join() [ 배열을 문자열로 변환 ]

join() 메소드는 회문 문자열과 관련된 알고리즘 문제를 풀던 중 학습하게 되어 TIL 주제로 선정하게 되었다. 자세한 내용은 아래 이어지며 알고리즘을 풀 때, 필수적으로 알아야 하는 개념이기 때문에 꼭 기억하고 연습할 때 활용하도록 하자!!

join()이란?

배열을 문자열로 변환하는 메소드

join()이란 배열이 있을 때, 해당 요소들을 원하는 연결자를 통해 연결하여 문자열로 바꿔주는 메소드이다. 활용 예시를 생각해보자면, 일단 배열을 문자열로 바꿔주는 메소드이기 때문에 배열을 문자열로 변환할 때 사용하면 매우 유용하다. 추가적으로 연결자를 선택하여 연결할 수 있기 때문에 문자열을 만들 때, 원하는 형식으로 바꾸어 변환할 수 있다는 장점이 있다.

join()의 구조

Array.join(구분자)

join()의 예시

let arr = ["I", "am", "join"];

// 1. 구분자가 없을 때
arr.join() // 'I,am,join'

// 2. 구분자 = ""
arr.join("") // 'Iamjoin'

// 3. 구분자 = " "(공백)
arr.join(" ") // 'I am join'

// 4. 구분자 "-"
arr.join('-') // 'I-am-join'

// 5. 구분자 3
arr.join(3) // 'I3am3join'

📌 reverse() [ 배열의 값을 거꾸로 뒤집기 ]

reverse() 메소드는 회문 문자열 (앞에서 읽을 때나 뒤에서 읽을 때, 똑같은 문자열)과 관련된 알고리즘 문제를 풀며, 학습하게 되었다. 앞서 알아본 join() 메소드와 함께 사용하여 문제를 해결하였다. reverse() 메소드를 사용하게 되면, 배열의 값을 거꾸로 뒤집을 수 있다. 따라서 회문 문자열을 확인할 때, 문자열을 뒤집는 과정을 메소드 하나로 손쉽게 뒤집을 수 있다. 배열을 다룰 때, reverse() 메소드와 함께 유용하게 사용할 수 있다.

reverse()란?

배열의 값을 거꾸로 뒤집는 메소드

reverse()의 구조

Array.reverse()

reverse()의 특징

특징으로는 reverse() 메소드를 호출한 배열을 뒤집고, 해당 배열을 가리키는 참조값을 변환한다. 따라서 reverse() 메소드를 실행시키면 원본 배열이 변형된다.

let arr = ["I", "am", "reverse"];

arr // [ 'I', 'am', 'reverse' ]

arr.reverse() // ['reverse', 'am', 'I']

// reverse() 메소드를 사용하게 되면 원본배열로 변경된다!!!
arr // [ 'reverse', 'am', 'I' ]

✅ 원본 배열 유지하면서 reverse() 메소드 사용하기

reverse() 메소드의 특징 중 해당 메소드를 사용하게 되면 원본 배열이 변경된다는 특징이 있다. 그렇다면 원본 배열을 유지하며 reverse() 메소드를 사용할 수는 없을까?

아니다 방법이 있다!!!
바로 , 스프레드 연산자 (...)를 활용하는 것이다!!

간단하게 설명하자면, 원본배열을 복사하여 메소드를 적용해야 원본배열을 변화하는 것을 방지할 수 있는데, 이때 스프레드 연산자를 사용하게 되면 배열이나 객체에서 요소들을 꺼내 복사할 수 있다. 따라서 스프레드 연산자를 통해 원본배열을 변동시키지 않을 수 있다.

스프레드 연산자에 대한 구체적인 내용은 차후에 제대로 다뤄보도록 하고 우선 어떻게 하면 원본 배열을 유지할 수 있는지 알아보도록 해보자.

let arr = ["I", "am", "reverse"];

let reverse = [...arr].reverse();

reverse // [ 'reverse', 'am', 'I' ]

// 스프레드 연산자를 활용하여 reverse()를 하게되면, 원본배열이 변하지 않는 것을 확인할 수 있다.
arr // [ 'I', 'am', 'reverse' ]

📌 String()/toString() [ 문자열로 형변환하기 ]

String()/toString() 메소드는 알고리즘 문제를 풀던 중 숫자 타입을 문자열 타입으로 뱐환해야 할 때, 사용하게 되었으며, 타입을 변환하고 다루는 것은 알고리즘 문제를 풀며 정말 빈번하게 사용되기 때문에 TIL 주제로 선정하게 되었다. 추가적으로 타입 변환이 중요한 이유는 우리는 알고리즘 묹제를 풀며 다양한 메소드들을 활용하여 문제에 접근하게 되는데, 메소드마다 사용할 수 있는 타입이 정해져 있기 때문에 타입 변환을 할 수 있게 된다면 메소드의 제한 없이 문제에 접근할 수 있다는 장점이 있다.

String()/toString()이란?

String()toString()은 모두 문자 타입 자료형으로 형변환을 해주는 메소드이다.

하지만 둘은 차이점이 존재하는데, 아래에서 구체적으로 알아보도록 하자

String()/toString()의 구조

// String() 메소드
String( object )

// toString() 메소드
obj.toString()

String()/toString()의 사용 예시

let num = 30;

// String() 메소드
String(num) // '30'

// toString() 메소드
num.toString() // '30'

String()/toString()의 차이점

✏️ String()

String()메소드는 자료형을 문자열 타입으로 형변환해주는 것 뿐만 아니라 new키워드와 함께 쓰이면 새로운 문자열 객체의 생성자가 될 수 있다.

let makeString = String(500)

makeString // '500'

// 객체의 생성자로 사용하기
let makeString2 = new String(500)
makeString2 // String{'0': '5', '1': '0', '2': '0'}

✏️ toString()

반면에 toString() 메소드의 경우, 2가지의 차이점이 있는데

  1. 문자열의 메서드로 사용되는 경우, valueOf()와 같은 기능을 수행한다.
let str = String(400)
str.valueOf()  // '400'

let str2 = String(300).toString()
str2 // '300' 

let str3 = new String(200).toString()
str3 // '200'
  1. 인자로 2 ~ 36 사이의 값을 넣게 되면 해당 진수로 변환된 문자열을 반환 받는다.
let num = 10;

// 10진법으로 변환 (인자가 비어있으면 10진수로 변환한다)
num.toString() // '10'

// 2진법으로 변환
num.toString(2) // '1010'

// 3진법으로 변환
num.toString(3) // '101'

📌 parseInt() & Number() [ 문자열을 숫자로 형변환하기 ]

parseInt() & Number()함수는 알고리즘 풀던 중 문자열로 이루어진 자료를 숫자로 바꾸어 다뤄야 하는 상황에서 학습하게 되었다. parseInt() & Number() 함수를 활용하게 되면 앞서 학습한 String() 또는 toString()과 반대로 문자열을 숫자로 형변환 할 수 있다.

parseInt() & Number()란?

문자열을 숫자로 형변환해주는 함수

parseInt() & Number()의 구조

// parseInt() 함수
parseInt(string)

// Number() 함수
Number(string)

parseInt() & Number()의 사용 예시

// parseInt() 함수
let str = '123';
parseInt(str) // 123

// Number() 함수
let str = '123';
Number(str) // 123

parseInt() & Number()의 차이점

parseInt() & Number() 함수 모두 공통점으로 문자열을 숫자로 형변환해주는 함수이다.
하지만 둘 사이에는 차이점이 있는데 각각의 함수를 보며 차이점을 확인해보도록 하자

✏️ parseInt()

  1. 문자열이 숫자가 아닌 경우, 문자열이 숫자로 시작하는 경우에는 숫자가 끝날 때까지만 형 변환 이후 반환한다. 만약 문자열의 시작이 숫자가 아닌 경우, NaN이 반환된다.
let str = '123가나다';
parseInt(str) // 123

let str2 = '가나다123';
parseInt(str2) // NaN
  1. 소수점의 경우 정수만 뽑아서 반환한다.
let str = '12.0345234';
parseInt(str) // 12

✏️ Number()

  1. 문자열이 숫자가 아닌 경우 NaN이 반환된다.
let str = '123가나다';
Number(str) // NaN

let str2 = '가나다123';
Number(str2) // NaN
  1. 소수점의 경우 소수점이 모두 표시가 되며, 숫자형으로 반환된다.
let str = '12.34245365';
Number(str) // 12.34245365

🌈 오늘 하루

오늘 TIL 주제들은 매우 중요하다. 알고리즘을 풀며 필수적인 개념들이 많이 포함되어 있기 때문이다. 따라서 자주 복습하고 이후에 알고리즘을 풀면서 적용해보는 연습을 많이 해야한다. 이렇듯 하나씩 나의 알고리즘 무기를 채워나가는 것이 매우 중요하다. 아무리 어려운 문제이더라도 위의 개념들을 바탕으로 해결할 수 있기 때문이다.

0개의 댓글