앞에서 읽을때와 뒤에서 읽을때가 같은 문자열을 팰린드롬이라고 합니다.
문자열이 입력되면 해당 문자열이 팰린드롬이면 Yes,아니면 No를 출력하는 프로그램을 작성하세요.
단, 회문을 검사할 때 알파벳만 가지고 회문을 검사하며, 대소문자를 구분하지 않습니다.
문자열을 소문자 혹은 대문자로 바꾼다음 replace(정규식)을 이용해 알파벳이 아닌 문자를 제거한다.
문자만 남은 문자열을 반전시킨다. => 이 때 join의 파라미터로 공백 설정을 해주어야 문자열이 모두 연결됨. join()의 기본 구분자는 ,라서 ()으로 두면 ,로 구분된 문자열이 나타남.
string과 reverse가 같은지 확인해서 같다면 answer를 YES로, 아니면 NO로 만든다.
function solution(string){
string = string.toLowerCase().replace(/[^a-z]/g,'');
reverse = string.split('').reverse().join('')
console.log(string,reverse);
let answer = (string === reverse) ? 'YES' : 'NO'
return answer
}
let string = 'found7, time: study; Yduts; emit, 7Dnuof'
console.log(solution(string))
문자와 숫자가 섞여있는 문자열이 주어지면 그 중 숫자만 추출하여 그 순서대로 자연수를 만듭니다.
만약 'tge0a1h205er'에서 숫자만 추출하면 0,1,2,0,5이고 이것을 자연수를 만들면 1205가 됩니다.
추출하여 만들어지는 자연수는 100,000,000을 넘지 않습니다.
function solution(string){
let answer = Number(string.replace(/[^0-9]/g,''))
return answer
}
let string1 = 'tge0a1h205er'
let string2 = 'g0en2T0s8eSoft'
console.log(solution(string2))
코딩인터뷰에서 가끔 메소드를 쓰지 말라고 제한을 걸 수도 있는데 그럴 때 사용할 수 있는 방식 + isNaN()과 for문을 사용하는 방법
어차피 내 풀이나 for문 풀이나 다 문자열을 순회하기 때문에 시간복잡도는 둘 다 O(n)이다.
function solution2(string){
let answer = 0
for(let x of string){
if(!isNaN(x)) answer = answer * 10 + Number(x)
/*answer 동작방식-0208 예시:
answer*10
-> 0을 만나면(answer가 0인 상태에서 *10)
=> +Number(x) => 0이면 0
-> 2을 만나면 0(answer가 0인 상태에서 *10)
=> +Number(2) => 0+2 = 2
-> 0을 만나면 20(answer가 2인 상태에서 *10)
=> +Number(0) => 20+0 = 20
-> 8을 만나면 200(answer가 20인 상태에서 *10)
=> +Number(8) => 200+8 = 208
*/
}
return answer;
}