알고리즘

백준 팰린드롬수(1259번) 스위프트 풀이

Thor_yeom 2023. 6. 25. 11:58

● 문제 핵심

- 기존 글자를 거꾸로 했을때와 같을때 비교

 

입력의 마지막 줄에 0이 나오면 받지 않는다고 되어 있는데 이것을 구현하는데 While문을 사용했다.

var inputArray: [String] = []

while true {
	let input = readline()!
    
    // "0"이 들어오면 반복문 종료
    if input == "0" {
    	break
    }
    
    // 배열에 담아주기
    inputArray.append(input)
}

// 여기서 조건이 없으면 계속 받게 되고 탈출 할 수 없게 된다.
// 필요한 조건은 마지막 줄에 0 이 나오면 반복문을 끝내는 조건을 추가해준다.

 

여기까지 구현했으면 다 풀었다 봐도 무방하다

이제 배열에 담긴 문자를 거꾸로 한것과 비교하는 코드는 작성하면 된다.

 

var inputArrayReversed: [String] = inputArray.map { $0.reversed() }

// for문을 사용해서 만들기 
var inputArrayReversed: [String] = []
for i in inputArray {
	inputArrayReversed.append(i.reversed())
}

 

자 이렇게 만들면 오류가 발생하는 걸 알 수 있다.

 

공식문서에서 reversed()를 찾아보면

 

리턴값이 ReversedCollection<Self>로 되어있다.... 즉 타입 오류로 인해 발생하는 컴파일 오류이고 고쳐보도록 하자 

var inputArrayReversed: [String] = inputArray.map { String($0.reversed()) }

// for문을 사용해서 만들기 
var inputArrayReversed: [String] = []
for i in inputArray {
	inputArrayReversed.append(String(i.reversed()))
}

String으로 형 변환해주면 간단하게 해결 된다.

 

그렇다면 reversed()값도 있으니 기존의 값과 비교해서 yes or no만 출력해주면 된다. 

아래는 전체 코드다.

 

import Foundation

var inputArray: [String] = []

while true {
    let input = readLine()!
    
    if input == "0" {
        break
    }
    inputArray.append(input)
}

var inputReversedArray: [String] = inputArray.map { String($0.reversed()) }
print("inputReversedArray",inputReversedArray)

for i in 0..<inputArray.count {
    if inputArray[i] == inputReversedArray[i] {
        print("yes")
    } else {
        print("no")
    }
}