앞에서 읽을 때나 뒤에서 읽을 때나 같은 문자열을 회문 문자열이라고 합니다.
문자열이 입력되면 해당 문자열이 회문 문자열이면 "YES", 회문 문자열이 아니면 “NO"를 출력 하는 프로그램을 작성하세요.
단 회문을 검사할 때 대소문자를 구분하지 않습니다.
function solution(s){
let answer="YES";
let n = Math.floor(s.length/2);
s = s.toLowerCase();
for(i=0; i<n; i++) {
if(s[i] !== s[s.length-i-1]) answer="NO";
}
return answer;
}
let str="goooG";
console.log(solution(str));
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));
정답 풀이의 경우, split('')
을 통해 각 글자를 하나하나 떼어놓은 상태의 array를 만든 후에, .reverse()
를 통해서 해당 array를 역순으로 정리하고, join('')
을 통해 array를 하나의 문자열로 통일시켰다.
앞에서 읽을 때나 뒤에서 읽을 때나 같은 문자열을 팰린드롬이라고 합니다.
문자열이 입력되면 해당 문자열이 팰린드롬이면 "YES", 아니면 “NO"를 출력하는 프로그램을 작성하세요.
단 회문을 검사할 때 알파벳만 가지고 회문을 검사하며, 대소문자를 구분하지 않습니다. 알파벳 이외의 문자들의 무시합니다.
function solution(s){
let answer="YES";
let word = "";
for(i=0; i<s.length; i++) {
let x = s.toLowerCase().charCodeAt(i);
if(65<=x && x <= 90) word+=s[i];
}
if(word.split('').reverse().join('')!=word) 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));
나의 풀이의 경우, for
문과 charCodeAt
을 통해서 s
의 각 글자의 영문 소문자 여부를 파악하였지만, 정답 풀이의 경우 정규 표현식을 이용하여 영문 소문자 여부를 확인하였다.
[^xyz]
부정 문자셋(negated character set) 또는 보충 문자셋(complemented character set)입니다. 괄호 내부에 등장하지 않는 어떤 문자와도 대응됩니다. 하이픈을 이용하여 문자의 범위를 지정할 수 있습니다. 일반적인 문자셋에서 작동하는 모든 것은 여기에서도 작동합니다.
예를 들어, 패턴[^abc]는 패턴[^a-c]와 동일합니다. 두 패턴은 "brisket"의 'r', "chop."의 'h' 에 대응됩니다.
문자와 숫자가 섞여있는 문자열이 주어지면 그 중 숫자만 추출하여 그 순서대로 자연수를 만 듭니다.
만약 “tge0a1h205er”에서 숫자만 추출하면 0, 1, 2, 0, 5이고 이것을 자연수를 만들면 1205 이 됩니다.
추출하여 만들어지는 자연수는 100,000,000을 넘지 않습니다.
function solution(str){
let answer="";
answer = str.toLowerCase().replace(/[a-z]/g, '');
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));
나의 풀이에서 정규식을 통해서 처리한 부분을 정답 풀이에서는 isNaN()
을 활용하였다. 나의 풀이의 경우는 해당 결과를 도출하기 위하여 toLowerCase()
와 replace()
를 두번 처리해야하기 때문에 isNaN()
을 활용하는 것이 더 효율적일 것 같다. (정확한 비교가 필요할 것 같다)