문자열 트레이닝 (Day 17-18)
[프로그래머스] 일일 도전 과제 문제 풀이 정리입니다.
관련 개념도 첨부하였으니 필요한 분들은 참고하세요.
코딩 기초 트레이닝, 코딩테스트 입문 문제를 Day별로 풀고 정리한 내용입니다.
🌞
✨Day 17-18
오늘도 문자열 관련 예제들이 많습니다
목표: 문자열 치환하기 & 정규식 익히기
- 배열 순회
reduce✨ 하나의 누적된 값
filter✨ 조건을 통과한 요소만 새 배열 생성 - 구조분해할당
알아야 할 메서드
- 탐색/확인
includes🔍 배열에 값 존재 여부 확인
lastIndexOf🔍 찾으려는 문자열의 마지막 인덱스 반환
match()🔍 문자열이 몇 번 등장하는지 세기 - 문자열 치환/변환
replaceAll🔄 문자열에서 모든 특정 패턴 치환 - 정규식
/zero|one|two|.../g: OR 패턴, 전역 치환
new RegExp(str,'g'): 문자열 동적 패턴
입문
숫자 찾기
function solution(num, k) {
return (num+"").indexOf(k)+1 || -1
}
🍞 (num+"") Number -> String
n의 배수 고르기
function solution(n, numlist) {
return numlist.filter((v)=> !(v%n))
}
🍞 filter
자릿수 더하기
function solution(n) {
return [...(n+"")].reduce((acc,cur)=> acc + Number(cur), 0)
}
function solution(n) {
return n
.toString()
.split("")
.reduce((acc, cur) => acc + Number(cur), 0);
}
OX퀴즈
function solution(quiz) {
return quiz.map((v)=> {
const [form,result] = v.split('=');
const [a, op, b] = form.split(' ');
const sum = op === '+' ? Number(a) + Number(b) : Number(a) - Number(b);
return sum === Number(result) ? 'O' : 'X'
})
}
🍞 구조분해할당
문자열안에 문자열
function solution(str1, str2) {
return str1.includes(str2) ? 1 : 2
}
🍞 includes
function solution(str1, str2) {
return str1.split(str2).length > 1 ? 1 : 2
}
🍞 split의 다른 쓰임새
제곱수 판별하기
function solution(n) {
let i = 1;
while(i*i<=n){
if(i*i===n) return 1;
i++;
}
return 2;
}
function solution(n) {
return Number.isInteger(Math.sqrt(n)) ? 1 : 2;
}
🍞 sqrt로 제곱근 구하고 isInteger 정수인지 확인
세균 증식
function solution(n, t) {
for(let i=0;i<t;i++){
n *= 2
}
return n
}
function solution(n, t) {
return n << t;
}
🍞 시프트연산 n<<t는 n*2^t
문자열 정렬하기 (2)
function solution(my_string) {
return [...my_string.toLowerCase()].sort().join('')
}
기초
특정 문자열로 끝나는 가장 긴 부분 문자열 찾기
function solution(myString, pat) {
return myString.slice(0,myString.lastIndexOf(pat)+pat.length)
}
문자열이 몇 번 등장하는지 세기
function solution(myString, pat) {
return [...myString].filter((_,idx)=>myString.slice(idx,idx+pat.length)
.includes(pat)).length
}
function solution(myString, pat) {
const reg = new RegExp(`(?=${pat})`, "g")
return myString.match(reg)?.length || 0;
}
🍞 정규식
ad 제거하기
function solution(strArr) {
return strArr.filter((v)=> !v.includes('ad'))
}
공백으로 구분하기 2
function solution(my_string) {
return my_string.split(' ').filter((v) => v!=='')
}
🍞 filter(v=>v)도 됨 : JS에서 ""는 falsy 값이기 때문
x 사이의 개수
function solution(myString) {
return myString.split('x').map((v)=>v.length)
}
간단한 식 계산하기
function solution(binomial) {
const [a, op, b] = binomial.split(' ')
switch (op){
case '+':
return Number(a) + Number(b);
case '-':
return Number(a) - Number(b);
case '*':
return Number(a) * Number(b)
}
}
🍞 구조분해할당
const ops = {
'+': (a, b) => a + b,
'-': (a, b) => a - b,
'*': (a, b) => a * b,
};
function solution(binomial) {
const [a, op, b] = binomial.split(' ');
return ops[op](+a, +b);
}
🍞 객체
rny_string
function solution(rny_string) {
return [...rny_string].map((v)=> v==='m'?'rn':v).join('')
}
function solution(rny_string) {
return rny_string.replaceAll(/m/g, "rn");
}
🍞 정규식