
알고리즘 스터디 2주차부터는 책을 정해서, 책의 내용을 따라가며 문제풀이와 기본다지기를 하기로 했다.

앞으로 알고리즘 스터디는 자바 알고리즘 인터뷰 with 코틀린에 나온 목차대로 문제를 풀기로 했다.
[LeetCode - 125. Valid Palindrome]
입력된 문장이 팰린드롬인지 확인하기 위한 코드를 작성해야한다.
특수 문자와 공백을 제거한 알파벳과 숫자로만 이루어진 문자를 거꾸로 뒤집어도 똑같은지 비교하는 문제이다.
class Solution {
fun isPalindrome(s: String): Boolean {
val origin = s.filter{it.isLetterOrDigit()}.lowercase()
val reverse = origin.reversed()
return origin == reverse
}
}
filter함수를 통해 특수 문자와 공백을 제거한뒤 lowercase()를 통해 소문자로 변환한 문자열을 reversed()를 통해 거꾸로 뒤집은 순서와 비교한 값을 return한다.
Char타입의 확장함수로 해당 값이 문자인지, 혹은 숫자인지 확인해 Boolean값을 반환한다.
isLetter() : 해당값이 오직 문자인 경우에만 true를 반환한다. 공백이나 특수문자의 경우 false
(영문 뿐만 아니라 다른 언어값도 문자일경우 true)
isDigit() : 해당값이 0 ~ 9사이일 경우 true를 반환한다. Digit은 숫자 자릿수를 나타내는 형식으로, 정수형 데이터 타입이 아닌 0 ~ 9의 각 문자를 나타낸다.
("1578"의 경우 각각 '1', '5', '7', '8' 4개의 Digit을 가지고 있다.)
isLetterOrDigit() : 값이 Letter과 Digit인 경우에만 true를 반환한다.
문자열은 Char값들의 집합이기때문에 reversed()를 사용해 간단히 순서를 거꾸로 뒤집을 수 있다.