► JS Algorithm/Basic
JavaScript 알고리즘 | 25_ 회문 찾기
다람트리
2022. 9. 28. 14:45
반응형
🔒 Q
입력받은 문자열이 회문인지 아닌지 판별하세요.
(팰린드롬 palindrome = 회문 : 앞에서부터 읽으나 뒤에서부터 읽으나 같은 말이 되는 어구)
조건:
1)알파벳 이외의 문자는 취급하지 않습니다.
2)대소문자는 구분하지 않습니다.
🔒 ex
입력값 | DA2r(ko3ra)nge, ligH*tgreen, ne#ergth#Gil, Eg@naro5krad |
출력값 | 회문입니다 |
🔒 Solution
▼나의풀이
function solution(nouns) {
let answer = "";
let arr = nouns;
let onlyString = []; // 문자만 묶음
var reg = /[\{\}\[\]\/?.,;:|\)*~`!^\-_+<>@\#$%&\\\=\(\'\"]/g; // 모든 특수문자 찾기
var nums = /[1-9]/g; // 모든 숫자 찾기
arr.map(
(v, i, a) =>
(onlyString += v.replace(reg, "").replace(nums, "").toLowerCase())
); //숫자,특수문자제거 및 소문자로 모두 변경
let origin = [...onlyString].join("");
let reversed = [...onlyString].reverse().join("");
origin === reversed
? (answer = "회문입니다")
: (answer = "회문이 아닙니다.");
return answer;
}
console.log(solution(["DA2r(ko3ra)nge", "ligH*tgreen", "ne#ergth#Gil", "Eg@naro5krad", ])
);
🟢 풀이법: 모든 문자에서 특수문자와 숫자만 제거하고, 남은 알파벳은 모두 소문자로 바꿔서 나열한다.
그리고 정방향과 역방향의 배열을 비교하여 동일한지 구분한다.
🟢 에러사항: 순방향, 역방향 모두 같은데도 불구하고, '회문이 아닙니다' 라고 나와서 멘붕..
이유는, 변수의 타입(원시형, 참조형) 때문이였다. 쉽게말해, 같은 배열끼리는 다른거고, 같은 스트링끼리는 같은거다.
아래의 이미지를 참고하자.
🟡 문제해결 전 err) 참조 자료형 (Reference data type) = 참조타입
참조타입은 원시타입이 아닌 모든 것이 참조 자료형이다.
즉, 배열([ ]), 객체({ }), 함수(function(){})
참조타입은 동적인 데이터를 보관하기위해 다른곳에 저장하고 변수에는 주소를 할당한다.
🟡 문제해결 후) 원시 자료형 (Primitive data type) = 원시타입
원시타입은 '하나'의 데이터정보를 담고 있다.
6가지: number(2.25987), string('sun'), boolean(true, false), undefined, null, symbol
반응형