[알고리즘] 문자열 탐색

먼지·2022년 5월 4일
0
post-thumbnail

1. 회문 문자열

앞에서 읽을 때나 뒤에서 읽을 때나 같은 문자열을 회문 문자열이라고 합니다.
문자열이 입력되면 해당 문자열이 회문 문자열이면 "YES", 회문 문자열이 아니면 “NO"를 출력
하는 프로그램을 작성하세요.
단 회문을 검사할 때 대소문자를 구분하지 않습니다

function solution(str) {
  const strArr = str.split('');
  return strArr.every(
    (cur, i) =>
      strArr[i].toLowerCase() ===
      strArr[strArr.length - 1 - i].toLowerCase()
  )
    ? 'Yes'
    : 'No';
}

// reverse 이용
// 답은 맞는데 배열도 비교가 되나..?
function solution2(str) {
  const arr = str.split('');
  return arr === arr.reverse() ? 'Yes' : 'No';
}
// array -> string
function solution2(str) {
  const reverseStr = str.split('').reverse().join('');
  return str.toLowerCase() === reverseStr.toLowerCase() ? 'Yes' : 'No';
}

console.log(solution('gooG')); // 'Yes'
console.log(solution('gogg')); // 'No'

2. 유효한 팰린드롬

1번 문제랑 똑같은 거 같은데 뭐가 다른 건지 모르겟음!

3. 숫자만 추출

문자와 숫자가 섞여있는 문자열이 주어지면 그 중 숫자만 추출하여 그 순서대로 자연수를 만
듭니다.
만약 “tge0a1h205er”에서 숫자만 추출하면 0, 1, 2, 0, 5이고 이것을 자연수를 만들면 1205
이 됩니다.
추출하여 만들어지는 자연수는 100,000,000을 넘지 않습니다

// isNaN('3sfs') or ('dfdsfㅇㄹㄴㅁㄹㅇ') === true
// isNaN('3') false
function solution(str) {
  let result = '';
  str.split('').forEach((v) => {
    if (!isNaN(v)) result += v;
  });
  return Number(result);
}

console.log(solution('g0en2T0s8eSoft')); // 208

4. 가장 짧은 문자거리

한 개의 문자열 s와 문자 t가 주어지면 문자열 s의 각 문자가 문자 t와 떨어진 최소 거리를 출
력하는 프로그램을 작성하세요.

못풀음 다시 풀어보기

5. 문자열 압축

알파벳 대문자로 이루어진 문자열을 입력받아 같은 문자가 연속으로 반복되는 경우 반복되는
문자 바로 오른쪽에 반복 횟수를 표기하는 방법으로 문자열을 압축하는 프로그램을 작성하시
오. 단 반복 횟수가 1인 경우 생략합니다

// KKHSSSSSSSE -> K2HS7E
function solution(str) {
  let cnt = 1; // 처음엔알파벳이무조건하나있으니까
  let answer = '';

  for (let i = 0; i < str.length; i++) {
    if (str[i] === str[i + 1]) cnt += 1;
    else {
      answer += str[i];
      if (cnt > 1) answer += String(cnt);
      cnt = 1;
    }
  }

  return answer;
}

// 못 풀음. str[i] === str[i+!]이 아니라 answer랑 str을 비교하려고 했음
function mySolution(str) {
  let answer = '';
  for (let i = 0; i < str.length; i++) {
    if (answer.length > 0) {
      if (answer[i - 1] === str[i]) {
        answer += 1;
      } else if (!isNaN(answer[i - 1])) {
      }
    }
    answer += str[i]; // K1 -> K
  }
  return answer;
}

console.log(solution('KKHSSSSSSSE'));
profile
꾸준히 자유롭게 즐겁게

0개의 댓글