릿코드 알고리즘을 풀면서 천천히 정리하는 시간..!
Given a valid (IPv4) IP address, return a defanged version of that IP address.
A defanged IP address replaces every period "." with "[.]".
Example 1:
Input: address = "1.1.1.1"
Output: "1[.]1[.]1[.]1"
Example 2:
Input: address = "255.100.50.0"
Output: "255[.]100[.]50[.]0"
문제와 코드 내용을 보면 특정한 문자(여기선 ".")를 다른 문자로 변경하라는 문제로 보였다.
특정 문자열을 변경하는 방법이 무엇일까라는 생각을 하고 처음에는 반복문으로 문자를 순회하여 변경하면 되는 게 아닌가? 라는 생각을 했지만...(처절하게 실패했다...)
그래서 다시 배열의 메서드에 대해 생각해보니 replace
를 생각하게 되었다. 하지만 replace()는 "한개의 문자열만 변경하기에 replaceAll을 보게 되었지만 replaceAll은 함수로 코드를 깔끔하게 사용하지 못한다고 생각하였기에 정규식 표현을 사용하게 되었다.
var defangIPaddr = function(address) {
//정규식 replace(/./gi,'[.]') <= 이렇게 하면 특정 문자열이 아닌 모든 문자가 변경된다.
let result = address.replace(/\./gi,'[.]')
return result;
};
defangIPaddr('1.1.1.1'); //결과:"1[.]1[.]1[.]1"
굳이 정규식을 사용할 것이 아닌 다른 표현도 있을 거라고 생각하였다. 그리하여 다시 보게된게 split()
과 join()
..!
split은 문자열을 인자로 주어진 문자열일 기준으로
쪼개서 배열에 담는다.
join 메소드는 배열의 요소들을 문자열로 변환 후, 메소드에 주어진 구분자를 이용해 하나의 문자열로 결합하여 반환합니다.
var defangIPaddr = function(address) {
//split으로 '.'을 기준으로 쪼개서 배열화 시키고 join 메서드를 이용해 값을 변경
return address.split('.').join('[.]');
};
defangIPaddr('1.1.1.1'); //결과:"1[.]1[.]1[.]1"
join
메서드와split
메서드를 다시 공부하는 계기가 되었고 역시 기초가 탄탄해야 된다라는 생각을 가지게 되었다.