-
[인프런 강의] JS 알고리즘 문제풀이(코딩테스트 대비) - 섹션3Algorithm 2022. 2. 6. 16:18
*5문제 모두 풀었음 (22.02.06)
1) 회문 문자열
문자열이 입력되면 해당 문자열이 회문 문자열이면 "YES", 회문 문자열이 아니면 “NO"를 출력 하는 프로그램을 작성하세요.
단 회문을 검사할 때 대소문자를 구분하지 않습니다.
function solution(s) { let answer = "YES"; let n = str.length; for (let i = 0; i < Math.floor(n/2); i++) { if (str[i].toUpperCase() !== str[n - i - 1].toUpperCase()) { // 대문자로 바꿔서 비교 answer = "NO"; break; } } return answer; } let str = "goooG"; console.log(solution(str));
*강사님 코드
👉s = s.toLowerCase() 를 하면 s 가 한 번에 소문자로 바뀜!
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"; } return answer; } let str="goooG"; console.log(solution(str));
- reverse 사용한 방식
function solution(s){ let answer="YES"; s=s.toLowerCase(); if (s.split('').reverse().join('') !== s) // s를 revserse 시킨 후 s와 비교 return "NO"; return answer; } let str="goooG"; console.log(solution(str));
2) 유효한 팰린드롬
- 이 문제의 포인트는 정규식을 사용하는 것!
function solution(s){ let answer="YES"; let regEng = /[^A-Za-z]/g; // 영문이 아닌 것 let revisedStr = s.replace(regEng, ""); let len = revisedStr.length; for (let i = 0; i < len; i++) { if (revisedStr[i].toUpperCase() !== revisedStr[len - i - 1].toUpperCase()) answer = "NO"; } return answer; } let str="found7, time: study; Yduts; emit, 7Dnuof"; console.log(solution(str));
*강사님 코드
function solution(s){ let answer="YES"; 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));
3) 숫자만 추출
function solution(str) { let answer = ""; for (let i = 0; i < str.length; i++) { let num = parseInt(str.charCodeAt(i)); if (num > 47 && num < 58) // 48 ~ 57 -> 아스키 10진수로 숫자 answer += str[i]; } if (answer[0] == "0") // 0208과 같이 첫 문자가 0일 때 answer = answer.slice(1); return parseInt(answer); } let str = "g0en2T0s8eSoft"; console.log(solution(str));
*강사님 코드
function solution(str){ let answer=""; for(let x of str){ if (!isNaN(x)) // 숫자가 아닌게 아닐 경우 == 숫자일 경우 (문자타입인 숫자) answer += x; } return parseInt(answer); } let str="g0en2T0s8eSoft"; console.log(solution(str));
- return하면서 parseInt 안쓰는 방법
function solution(str){ let answer=0; for(let x of str){ if (!isNaN(x)) answer = answer * 10 + Number(x); // 처음에 0이면 계속 0이고, 그 후 2 = 0*10+2 와 같이 } return answer; } let str="g0en2T0s8eSoft"; console.log(solution(str));
4) 가장 짧은 문자거리
function solution(s, t) { let answer = []; let tempList = []; // t의 인덱스를 담을 배열 let min = 0; for (let i = 0; i < s.length; i++) { if (s[i] === t) tempList.push(i); } for (let i = 0; i < s.length; i++) { if (s[i] !== t) { // t와 같지 않은 값인 경우 min = Number.MAX_SAFE_INTEGER for (let j = 0; j < tempList.length; j++) { if (Math.abs(s.indexOf(s[i]) - tempList[j]) < min) { // s 요소들의 인덱스와 t 인덱스 차의 절대값이 min 보다 작을 경우 min = Math.abs(s.indexOf(s[i]) - tempList[j]); // 해당 값을 min에 담음 } } answer.push(min); } else { // t와 같은 값인 경우 0을 넣어줌 answer.push(0); } } return answer; } let str = "teachermode"; console.log(solution(str, 'e')); /* [ 1, 0, 1, 2, 1, 0, 1, 2, 2, 1, 0 ] */
*강사님 코드
- 왼쪽부터 한 번 돌면서 e 만났을 때 0 그 후 e 만날 때까지 p++
- 위의 방법을 오른쪽부터 한 번 더 돌면서 min 값으로 변경
function solution(s, t){ let answer=[]; let p=1000; 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); } } return answer; } let str="teachermode"; console.log(solution(str, 'e'));
5) 문자열 압축
function solution(s) { let answer = ""; let cnt = 1; for (let i = 0; i < s.length; i++) { if (s[i] == s[i + 1]) { cnt++; } else { if(cnt !== 1) answer += s[i] + cnt; else answer += s[i]; cnt = 1; } } return answer; } let str = "KKHSSSSSSSE"; console.log(solution(str)); //K2HS7E
*강사님 코드
function solution(s){ let answer=""; let cnt=1; s=s+" "; for(let i=0; i<s.length-1; i++){ // s.length-1 -> s=s+" "; 로 하나 더 늘려서 -1 해줌 if(s[i]===s[i+1]) cnt++; else{ answer+=s[i]; if(cnt>1) answer+=String(cnt); cnt=1; } } return answer; } let str="KKHSSSSSSSE"; console.log(solution(str));
'Algorithm' 카테고리의 다른 글
[프로그래머스] 알고리즘 기초 10문제 (Python) (0) 2022.02.11 [백준 알고리즘] 10773번: 제로 (JavaScript) (0) 2022.02.09 [인프런 강의] JS 알고리즘 문제풀이(코딩테스트 대비) - 섹션2 (0) 2022.02.03 [이론] 삼각형의 결정 조건 (0) 2022.01.30 [인프런 강의] JS 알고리즘 문제풀이(코딩테스트 대비) - 섹션1 (0) 2022.01.30