반응형
Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
Tags
- 스프링
- 국비IT
- 코딩테스트
- 정보처리기사실기정리
- 정보처리기사실기요약
- react
- 정보처리기사
- javascript
- 리액트
- 자스코테
- 오라클
- typescript
- 타입스크립트
- 정보처리기사정리
- 자바스크립트
- Oracle
- 이안의평일코딩
- 자바의정석
- ReactNative
- Java의정석
- 평일코딩
- CSS
- 국비코딩
- 정보처리기사실기
- 자바스크립트 코딩테스트
- 리액트네이티브
- spring
- VUE
- php
- 정보처리기사요약
Archives
- Today
- Total
이안의 평일코딩
[JS] 문자열탐색 (회문, 팰린드롬, 추출, 최단거리, 압축) 본문
반응형
회문문자열
<script>
// 홀수일때도 짝수일때도 동일함 Math.floor 소수점 내림
function solution(s){
let answer="YES";
s=s.toLowerCase();
// 첫번째 방법
let len=s.length;
for(let i=0; i<Math.floor(len/2); i++){
if(s[i]!==s[len-i-1]) return "NO";
}
// 두번째 방법
// .split('') 문자 한개씩 배열이 됨 ["g", "o", "o", "o", "g"]
// .reverse() 뒤집음
// .join('') string으로 다시 묶음
if(s.split('').reverse().join('')!=s) return "NO";
return answer;
}
let str="goooG";
console.log(solution(str));
</script>
팰린드롬
.split('') 문자 한개씩 배열이 됨 ["g", "o", "o", "d"]
.reverse() 뒤집음
.join('') string으로 다시 묶음 good
<script>
function solution(s){
let answer="YES";
// 문제에 알파벳 이외의 문자는 무시한다고 기재되어있었으므로
// .replace() 소문자 알파벳 아닌것들 찾아서 빈문자로 바꿈
s=s.toLowerCase().replace(/[^a-z]/g, '');
if(s.split('').reverse().join('')!==s) return "NO";
return answer;
}
// 앞에서 읽을 때나 뒤에서 읽을 때나 같은 문자열을 팰린드롬이라고 한다
let str="found7, time: study; Yduts; emit, 7Dnuof";
console.log(solution(str));
</script>
숫자만 추출
<script>
function solution(str){
let answer="";
// isNaN() 숫자면 거짓, 숫자가 아니면 참
for(let x of str){
if(!isNaN(x)) answer+=x; // !isNaN() 숫자면 참
}
return parseInt(answer); // 0208 -> 208
}
let str="g0en2T0s8eSoft";
console.log(solution(str));
</script>
가장 짧은 문자거리
<script>
function solution(s, t){
let answer=[];
let p=1000;
// 왼쪽에서 오른쪽으로 먼저 문자열 탐색
// [1001, 0, 1, 2, 3, 0, 1, 2, 3, 4, 0]
for(let x of s){
if(x===t){
p=0;
answer.push(p);
}
else{
p++;
answer.push(p);
}
}
// 오른쪽에서 왼쪽으로 문자열 탐색
p=1000;
for(let i=s.length-1; i>=0; i--){
if(s[i]===t) p=0;
else{
p++;
answer[i]=Math.min(answer[i], p);
// 기존 answer[i]값과 p값 중 작은 값을 넣음
}
}
return answer;
}
let str="teachermode";
console.log(solution(str, 'e')); // e와의 최단거리
</script>
문자열 압축
<script>
function solution(s){
let answer="";
let cnt=1;
s=s+" ";
for(let i=0; i<s.length-1; i++){
if(s[i]===s[i+1]) cnt++;
else{
answer+=s[i];
if(cnt>1) answer+=String(cnt);
cnt=1;
}
}
return answer;
}
let str="KKHSSSSSSSE"; // K2HS7E
console.log(solution(str));
</script>
반응형
'Study > JS Algorithm Rocket' 카테고리의 다른 글
[모집] 자바스크립트 알고리즘 로켓스터디 (0) | 2021.08.23 |
---|---|
[JS] 완전탐색 (브루트포스) (0) | 2021.05.26 |
[JS] 1, 2차원 배열 탐색 (가위바위보, 등수, 격자판, 봉우리) (0) | 2021.05.24 |
[JS] 기초 (2) - 문자대체, 찾기, 개수, 중복제거, 대소문자 변환 (0) | 2021.05.17 |
[JS] 기초 (1) - 최솟값, 삼각형, 개수, 합, 홀수, 10부제, 일곱난쟁이 (0) | 2021.05.17 |
Comments