
*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 |