해당 문제 주소 : 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
[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
정규식은 대체 어디다 쓰는걸까.. 왜 쓰는걸까.. 아직 안 배워서 모르겠다. 언젠가 교수님이 설명해 주시겠지.
우선 이 코드에 쓰인 정규식만 호로록 보고 넘어가자.
replace(/바꿀 문자열/조건, 바꿀 문자열이 있는 문자열)
/ \d ( ? = \d {4} /가 바꿀 문자열이란 소린데, 어렵네.. 응.. 어려워...
- \d : 0~9까지의 숫자를 검색함
- ?
- ? 앞에 있는 조건이 아예 없거나, 한번 반복되는 조건.
- 예) a?bpc?
- a가 0~1번 반복된 후, bp가 오고, c가 0~1번 반복된 문자열을 찾음
- abpc, bpc, abp, bp 가능.
- * +? {} 뒤에 ?를 쓰면 가능한 적은 문자열을 매칭해준다
- /\d+/는 123abc에서 123을 반환. 조건에 맞는 모든 것을 반환
- /\d+?/는 123abc에서 1만을 반환.
- (?:x)는 3번과 달리 x에 일치한 모든것을 반환한다.
- (?:123)은 123123123에서 123123123을 반환
- x(?=y)는 y가 뒤따라오는 x에만 매칭이 된다.
- {4} : 앞 문자가 4번 반복할때 매칭된다. 양의 정수만 중괄호 안에 넣을 수 있다.
- 총정리 : \d가 4번 반복이 되는 문자열이 뒤따라오는 \d에만 매칭이 된다. 문자열에서 4개의 숫자가 뒤따라오는 문자열은 맨 마지막 문자 4개에만 적용이 된다. 즉, 가장 마지막 숫자 4개가 따라오는 앞 숫자열이 선택이 되는 것.
'실천하기 > 코딩테스트' 카테고리의 다른 글
[220108] Lv.1 평균값 구하기 (0) | 2022.01.08 |
---|---|
[220108] Lv.1 / 하샤드의 수 (0) | 2022.01.08 |
[220105] Lv.2 피보나치 수열 / 메모이제이션으로 풀기 (0) | 2022.01.05 |
[220104] 코테 Lv.1 / 행렬의 덧셈 (0) | 2022.01.04 |
[220104] 코테 Lv.1 / x만큼 간격이 있는 n개의 숫자 (0) | 2022.01.04 |
댓글