본문 바로가기
실천하기/코딩테스트

[220107] Lv.1 / 핸드폰 번호 가리기

by 한코코 2022. 1. 7.

 

해당 문제 주소 : https://programmers.co.kr/learn/courses/30/lessons/12948

splice를 사용해보려고했는데, 문자열이라서 사용이 안된다고한다. 배열만 가능하대. 아 그럼 배열로 만들어.

 

 

for문만 사용해서 풀기

let phone="01033334444"

let phoneArr=[]

for(let i=0; i<phone.length; i++){
	phoneArr.push(phone[i])
}

for(let i=0; i<(phoneArr.length)-4; i++){
	phoneArr[i]='*'
}

let answer=""
for(let i=0; i<phoneArr.length; i++){
	answer+=phoneArr[i]
}

console.log(answer)

 

 

splice와 concat 사용해서 풀기

let phone="01033334444"

let phoneArr=[]
for(let i=0; i<phone.length; i++){
	phoneArr.push(phone[i])
}

for(let i=0; i<(phoneArr.length)-4; i++){
	phoneArr.splice(i,1,'*')
}

let answer=""
for(let i=0; i<phoneArr.length; i++){
	answer = answer.concat(phoneArr[i])
}

 

 

splice과 concat에 대한 설명글

https://hancoco.tistory.com/35?category=1028077 

 

[220105] 문자열 자르기, split,repeat,replace,repalceAll,includes,indexOf,substring,substr,concat,valueOf,slice,splice

오늘 수업은 감자특집이라고 하겠다. 수업을ㅋㅋㅋ 듣고는 있는데 하나도 이해를 못해서 그저 같이 흘러감ㅋㅋㅋㅋㅋㅋ 나는 말하는 감자지만 괜찮아!!!! 괜찮아!!!!! 나는 살아숨쉬는 감자니까

hancoco.tistory.com

 

 


[220108] split과 fill로 좀 더 단순하게 풀기

phone_number="01033334444"

let temp = new Array();
//split은 배열에만 작동하니까 배열로 만들어줌

temp=phone_number.split("");
//문자열 하나하나를 배열에 뜯어서 저장

let answer=(temp.fill('*',0,-4)).join('')
//인덱스 0번부터 끝에서 4번째 인덱스전까지 *로 채워줌 --> fill
//알알이 저장되어있는 배열을 띄어쓰기 없이 문자열로 뭉침 -->join

console.log(answer)

 


정규식 응용하기 : replace랑 정규식 사용

다른 사람이 푼 코드인데, 정규식을 써서 그런지 repeat나 slice를 쓴것보다 3배정도 느리다고 함. 정규식을 이렇게 쓸 수 있다는 사용방법을 한번 익혀보기 좋다고 생각해서 가져옴.

let s="01033334444"
let i=s.replace(/\d(?=\d{4})/g, "*");

 

정규식 참고 사이트 : https://beomy.tistory.com/21

 

[자바스크립트] 정규식(Regular Expressions)

정규식(Regular Expressions) 정규식은 문자열에 포함된 문자 조합을 찾기 위해 사용되는 패턴입니다. 코드를 간략하게 만들 수 있으나, 가독성이 떨어질 수 있습니다. RegExp의 exec, test 메소드와 String

beomy.tistory.com

 

정규식은 대체 어디다 쓰는걸까.. 왜 쓰는걸까.. 아직 안 배워서 모르겠다. 언젠가 교수님이 설명해 주시겠지.

우선 이 코드에 쓰인 정규식만 호로록 보고 넘어가자.

replace(/바꿀 문자열/조건, 바꿀 문자열이 있는 문자열)

/  \d ( ? = \d {4} /가 바꿀 문자열이란 소린데, 어렵네.. 응.. 어려워...

  1. \d : 0~9까지의 숫자를 검색함
  2. ?
    1. ? 앞에 있는 조건이 아예 없거나, 한번 반복되는 조건.
    2. 예) a?bpc?
      1. a가 0~1번 반복된 후, bp가 오고, c가 0~1번 반복된 문자열을 찾음
      2. abpc, bpc, abp, bp 가능.
    3. * +? {} 뒤에 ?를 쓰면 가능한 적은 문자열을 매칭해준다
      1. /\d+/는 123abc에서 123을 반환. 조건에 맞는 모든 것을 반환
      2. /\d+?/는 123abc에서 1만을 반환.
    4. (?:x)는 3번과 달리 x에 일치한 모든것을 반환한다.
      1. (?:123)은 123123123에서 123123123을 반환
    5. x(?=y)는 y가 뒤따라오는 x에만 매칭이 된다.
  3. {4} : 앞 문자가 4번 반복할때 매칭된다. 양의 정수만 중괄호 안에 넣을 수 있다.
  4. 총정리 : \d가 4번 반복이 되는 문자열이 뒤따라오는 \d에만 매칭이 된다. 문자열에서 4개의 숫자가 뒤따라오는 문자열은 맨 마지막 문자 4개에만 적용이 된다. 즉, 가장 마지막 숫자 4개가 따라오는 앞 숫자열이 선택이 되는 것.

댓글