Where who wants to meet someone

백준 Swift [25501] 재귀의 귀재 본문

백준 알고리즘 문제 기록/재귀

백준 Swift [25501] 재귀의 귀재

Lust3r 2023. 9. 13. 15:22
728x90

난이도

브론즈 II

 

문제

https://www.acmicpc.net/problem/25501

 

25501번: 재귀의 귀재

각 테스트케이스마다, isPalindrome 함수의 반환값과 recursion 함수의 호출 횟수를 한 줄에 공백으로 구분하여 출력한다.

www.acmicpc.net

 

내 답안

var palindromeCount = 0

func testPalindrome(of text: [String], from left: Int, to right: Int) -> Int {
    palindromeCount += 1

    if left >= right {
        return 1
    } else if text[left] != text[right] {
        return 0
    } else {
        return testPalindrome(of: text, from: left + 1, to: right - 1)
    }
}

for _ in 1...Int(readLine()!)! {
    let input = readLine()!.map { String($0) }

    palindromeCount = 0
    print(testPalindrome(of: input, from: 0, to: input.count - 1), palindromeCount)
}
  • 팰린드롬 식은 문제에 제시된 것을 사용.
    양 끝단의 인덱스를 가지고 판별하는데, 각각 끝에서부터 시작해서 그 위치의 글자가 같으면 다음 인덱스로 넘어가고 글자가 다르면 0을 반환하는 식으로 진행하다 left 인덱스가 right보다 크거나 같아지면 전부 확인한 것이므로 1을 반환(글자가 다른게 없다는 것)
  • Swift에서는 String의 인덱스로 접근이 안되기 때문에 map을 통해 배열로 바꿔주고 메서드를 호출했다.
    palindromeCount 변수를 따로 만들어 메서드가 호출될 때마다 해당 값을 +1 해주는 식으로 해결