[문자열 탐색][JS] 회문 문자열

Teasan·2022년 6월 26일
0

Algorythm

목록 보기
4/17
post-thumbnail

회문 문자열



문제 설명

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

제한 사항

없음

입력 설명

첫 줄에 정수 길이 100을 넘지 않는 공백이 없는 문자열이 주어집니다.

출력 설명

첫 번째 줄에 회문 문자열인지의 결과를 YES 또는 NO로 출력합니다.

입출력 예제

▣ 입력예제 1

  • gooG

▣ 출력예제 1

  • YES

해답/풀이 1

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));

출력

  • YES

풀이 순서

function solution(s) {
  let answer = "YES";
  s = s.toLowerCase();

  return answer;
}

let str = "goooG";
console.log(solution(str));
  • 인자로 받는 str을 toLowerCase() 메소드를 사용하여 소문자로 통일해준다.
function solution(s) {
  let answer = "YES";
  s = s.toLowerCase();
  let len = s.length;
  for (let i = 0; i < Math.floor(len / 2); i++) {}
  return answer;
}

let str = "goooG";
console.log(solution(str));
  • 인자로 받는 str이 홀수일 경우를 대비해서, Math.floor(str 길이 / 2) 값 만큼 for 문을 돌도록 한다.
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)); // YES
  • 그리고, 해당 str의 i 번째 값이 뒤에서부터 index를 세었을 때 len - i - 1의 i 번째 값이랑 같지 않을 경우, "NO"를 return 하도록 했다.

해답/풀이 2

function solution(s) {
  let answer = "YES";
  s = s.toLowerCase();
  if (s.split("").reverse().join("") != s) return "NO";
  return answer;
}

let str = "gooG";
console.log(solution(str));

출력

  • YES

풀이 순서

function solution(s) {
  let answer = "YES";
  let str = s.toUpperCase();
  return answer;
}

let str = "gooG";
let str2 = "Staeer";
console.log(solution(str));
console.log(solution(str2));
  • 먼저 인자로 받는 str을 toLowerCase() 메소드를 사용하여 소문자로 통일 해준다.
function solution(s) {
  let answer = "YES";
  let str = s.toUpperCase();
  console.log(str.split(""));
  // ['G', 'O', 'O', 'G']
  // ['S', 'T', 'A', 'E', 'E', 'R']

  return answer;
}

let str = "gooG";
let str2 = "Staeer";
console.log(solution(str));
console.log(solution(str2));
  • 그리고 split("")를 사용해서 배열을 생성하고, 문자열 한글자 한글자를 쪼개준다.
function solution(s) {
  let answer = "YES";
  let str = s.toUpperCase();

  console.log(str.split("").reverse());
  // ['G', 'O', 'O', 'G']
  // ['R', 'E', 'E', 'A', 'T', 'S']

  return answer;
}

let str = "gooG";
let str2 = "Staeer";
console.log(solution(str));
console.log(solution(str2));
  • reverse()를 사용하여, 쪼개진 문자열을 담고 있는 배열을 뒤집어준다.
function solution(s) {
  let answer = "YES";
  let str = s.toUpperCase();

  console.log(str.split("").reverse().join(""));
  // GOOG
  // REEATS

  return answer;
}

let str = "gooG";
let str2 = "Staeer";
console.log(solution(str));
console.log(solution(str2));
  • 마지막으로, join("") 메서드를 사용해서 배열 안의 모든 문자열 요소를 연결하여 하나의 문자열로 변환한다.
function solution(s) {
  let answer = "YES";
  let str = s.toUpperCase();

  if (str !== str.split("").reverse().join("")) {
    return "NO";
  }
  return answer;
}

let str = "gooG";
let str2 = "Staeer";
console.log(solution(str));
console.log(solution(str2));
  • 위의 console.log() 를 참고하여, 만약 인자로 받은 문자열 str이 str.split("").reverse().join("") (뒤집은 문자열) 과 같지 않는다면, "NO"를 return 하도록 작성해주었다.

⚡️ Resource


toLowerCase() 메서드

  • toLowerCase() 메서드는 문자열을 소문자로 변환해 반환합니다.

MDN 공식 문서 : String.prototype.toLowerCase()

Example

const sentence = 'The quick brown fox jumps over the lazy dog.';

console.log(sentence.toLowerCase());
// expected output: "the quick brown fox jumps over the lazy dog."

Math.floor() 메서드

  • Math.floor() 함수는 주어진 숫자와 같거나 작은 정수 중에서 가장 큰 수를 반환합니다.

MDN 공식 문서 : Math.floor()

Example

console.log(Math.floor(5.95));
// expected output: 5

console.log(Math.floor(5.05));
// expected output: 5

console.log(Math.floor(5));
// expected output: 5

console.log(Math.floor(-5.05));
// expected output: -6

split() 메서드

  • split() 메서드는 String 객체를 지정한 구분자를 이용하여 여러 개의 문자열로 나눕니다.

MDN 공식 문서 : String.prototype.split()

Example

const chars = str.split('');
console.log(chars[8]);
// expected output: "k"

const strCopy = str.split();
console.log(strCopy);
// expected output: Array ["The quick brown fox jumps over the lazy dog."]

reverse() 메서드

  • reverse() 메서드는 배열의 순서를 반전합니다. 첫 번째 요소는 마지막 요소가 되며 마지막 요소는 첫 번째 요소가 됩니다.

MDN 공식 문서 : Array.prototype.reverse()

Example

const array1 = ['one', 'two', 'three'];
console.log('array1:', array1);
// expected output: "array1:" Array ["one", "two", "three"]

const reversed = array1.reverse();
console.log('reversed:', reversed);
// expected output: "reversed:" Array ["three", "two", "one"]

// Careful: reverse is destructive -- it changes the original array.
console.log('array1:', array1);
// expected output: "array1:" Array ["three", "two", "one"]

join() 메서드

  • join() 메서드는 배열의 모든 요소를 연결해 하나의 문자열로 만듭니다.

MDN 공식 문서 : Array.prototype.join()

Example

const elements = ['Fire', 'Air', 'Water'];

console.log(elements.join());
// expected output: "Fire,Air,Water"

console.log(elements.join(''));
// expected output: "FireAirWater"

console.log(elements.join('-'));
// expected output: "Fire-Air-Water"

⚡️ Reference


✍🏻 자바스크립트 알고리즘 문제풀이 - 인프런

profile
일단 공부가 '적성'에 맞는 개발자. 근성있습니다.

0개의 댓글