-
배열 fill 메소드, 문자열 repeat 메소드Language/JavaScript 2023. 3. 15. 03:05
프로그래머스 문제를 풀다가 새로 알게 된 메소드가 있어 정리한다.
[프로그래머스] 핸드폰 번호 가리기
프로그래머스 모바일은 개인정보 보호를 위해 고지서를 보낼 때 고객들의 전화번호의 일부를 가립니다.
전화번호가 문자열 phone_number로 주어졌을 때, 전화번호의 뒷 4자리를 제외한 나머지 숫자를 전부 *으로 가린 문자열을 리턴하는 함수, solution을 완성해주세요.
- 제한 조건 : phone_number는 길이 4 이상, 20이하인 문자열입니다.function solution(phoneNumber) { const preNumber = phoneNumber.slice(-4) const postStar = [...phoneNumber.slice(0,phoneNumber.length - 4)].map(e => '*').join('') return preNumber + postStar }
코드를 보면 여러가지 메소드들을 조합해서 풀었는데, 음... 일단 for문을 피하고 최대한 읽기 쉬운 코드를 작성하고 싶었지만 풀이 당시에는 저게 최선이었다.
다른 사람들의 풀이를 보니 방법이 다양했다.
function solution(s){ return "*".repeat(s.length - 4) + s.slice(-4); } function solution(s) { [...s].fill("*", 0 , s.length-4).join("") }
그러다 문득, 'for 문이 꼭 나쁜건가..?' 싶었다.
어쨌든 다른 사람들의 풀이를 보면 코드를 짧게 한 것 빼고는 내 풀이와 시간복잡도는 비슷해 보였다.
그래서 검색해보니, 이런 자료를 볼 수 있었다.
실행시간 비교
길이가 10000000인 배열을 0으로 초기화할 때, 실행시간을 기록해보았다.
for문이 가장 빠르긴 했지만 Array.fill과 실행시간 차이가 크지 않기 때문에 Array.fill을 사용하는게 가독성이 높고 좋을 것 같다.
방법 소요 시간(ms) for 문 240 ~ 260 Array.from 1350 ~ 1400 Array.fill 310 ~ 380 Array.map 2100 ~ 2150 'Language > JavaScript' 카테고리의 다른 글
반복문(while, do-while) (0) 2023.03.15 정렬 메소드 sort와 localeCompare (0) 2023.03.06 [자바스크립트] Map과 Set (0) 2023.01.17 [Javascript] 클래스의 정적(static)메소드와 프로퍼티, 상속 (0) 2023.01.03 [Javascript] 클래스의 동작원리와 클래스 상속(오버라이딩) (0) 2023.01.03