2022. 10. 6. 11:03ใAlgorithm
๋ฐฑ์ค - ํ๋ฌธ(Swift)
๋ฌธ์ ์ค๋ช
https://www.acmicpc.net/problem/17609
๋์ ํ์ด
์ด ํ์ด๋ก ์์ ์ ํ ์คํธ์ผ์ด์ค๋ฅผ ๊ฒ์ฌํ๋ฉด ์ ๋ถ ๋ง๋ค.
ํ์ง๋ง ์ค์ ๋ก ์ ์ถํ๋ฉด ์ฒ์๋ถํฐ ์คํจํ๋ ๊ฑธ ๋ณผ ์ ์๋ค..
์ด์ ๋ ์ญ์ ๋ฐ๋ก๋ฅผ ์๊ฐํ์ง ์์๊ธฐ ๋๋ฌธ์ด๋ค.
์ด ๋ฌธ์ ๋ ์์ชฝ์ด ๊ฐ์ง์์๋ ์ผ์ชฝ์ ์ถ์ถํด์ ์งํํ๋ ๊ฒฝ์ฐ์ ์ค๋ฅธ์ชฝ์ ์ถ์ถํด์ ์งํํ๋ ๊ฒฝ์ฐ ๋ ๊ฐ์ง๋ฅผ ๊ฐ๊ฐ ํ์ํด์ค์ผํ๋๋ฐ,
์๋ ๋ด ์ฝ๋๋ ์ผ์ชฝ์ด ์ถ์ถ๋๋ค๋ฉด ์ผ์ชฝ๋ง ๊ฐ๊ณ ์ค๋ฅธ์ชฝ์ ๊ฒฝ์ฐ๋ ํ์ํ์ง ์๊ฒ ๋๋ค.(์ค๋ฅธ์ชฝ์ ๋จผ์ ์ถ์ถํ์ด์ผ ์ ์ฌํ๋ฌธ์ด์์ ์๋ ์๋๋ฐ ๋ง์ด๋ค)
๊ทธ๋์ ๋ค๋ฅธ์ฌ๋์ด ์ฌ๊ท๋ฅผ ์ด์ฉํ ๊ฒ์ ๋ณด๊ณ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํด์๋ค.
import Foundation
let n = Int(readLine()!)!
var results: [Int] = []
func checkRotate(_ array: [Character]) -> Int {
var start = 0
var end = array.count-1
var cnt = 0
while start < end {
if cnt > 1 {
return 2
}
if array[start] == array[end] {
start += 1
end -= 1
} else if array[start+1] == array[end] {
start += 1
cnt += 1
} else if array[start] == array[end-1] {
end -= 1
cnt += 1
} else {
return 2
}
}
if cnt == 1 {
return 1
} else {
return 0
}
}
for _ in 0..<n {
let input = Array(readLine()!.lowercased())
results.append(checkRotate(input))
}
for x in results {
print(x)
}
๋ค๋ฅธ ์ฌ๋์ ํ์ด
์ด ํ์ด์ ํต์ฌ์ ๊ฐ๊ฐ์ ์ผ์ด์ค๋ฅผ if๋ฌธ์ ํตํด ์ฌ๊ท๋ก ๋์๊ฐ๋ฉด์ ๋ชจ๋ ๊ฒฝ์ฐ๋ฅผ ํ์ํ๋ ๊ฒ์ด๋ค
๊ทธ๋ฐ๋ฐ "์ฒซ๋ฒ์งธ if๋ฌธ์์(๋จผ์ ์ผ์ชฝ์ ์ถ์ถํ์๋) ์ ์ฌํ๋ฌธ์ result์ ๋ด์๋๋ฐ ๋๋ฒ์งธ if๋ฌธ์์ ์ ์ฌํ๋ฌธ์ด ์๋๊ฒ ๋ด๊ฒจ์ง ์ ์๋ ๊ฑฐ ์๋๊ฐ?" ๋ผ๋ ์๊ฐ์ด ๋ค ์ ์๋ค.
ํ์ง๋ง ์ด๋ ๋ฌธ์ ๊ฐ ํ์ ์ ์ด๊ธฐ ๋๋ฌธ์ ์๊ฐ์ ์ข ํด๋ณด๋ฉด ์ฝ๊ฒ ์ฒ๋ฆฌํ ์ ์๋ค.
์ผ๋จ ํ๋ฒ ๊ฐ์ ์ถ์ถํ ์ํ(์ผ์ชฝ์ด๋ ์ค๋ฅธ์ชฝ์ด๋ )๋ ์ ์ฌํ๋ฌธ์ธ ์ํ์ด๋ค. ๊ทธ ์ํ์์ ์ญ ๋ฌธ์ ์์ด ๊ฐ ๋ฌธ์๊ฐ ๊ฐ๋ค๋ฉด ์ ์ฌํ๋ฌธ์ธ๋ฐ, ๋ฌธ์ ๊ฐ ์์๋๋ if cnt == 1 ์์ ๊ฑธ๋ฆฌ๊ณ return์ด ๋๊ธฐ ๋๋ฌธ์ ์ฒซ๋ฒ์งธ if๋ฌธ์์์ ์ ์ฌํ๋ฌธ์ etc๋ก ๋ฐ๋๋ ๊ฒฝ์ฐ๊ฐ ์กด์ฌํ์ง ์๋๋ค.
enum PalinType: Int {
case palin = 0
case psuedo = 1
case etc = 2
}
func isPalin(_ arr: [Character], _ s: Int, _ e: Int, _ cnt: Int) {
if (s < e) {
if arr[s] == arr[e] {
isPalin(arr, s+1, e-1, cnt)
} else {
// ํ๋๋ฅผ ์ถ์ถํ ์ํ์์ ๋ ์์ชฝ์ด ๊ฐ์ง์์ ๊ฒฝ์ฐ๋ ํ๋ฌธ๋ ์ ์ฌํ๋ฌธ๋ ์๋ ์ํ์ด๋ค.
if cnt == 1 {
return
}
if arr[s+1] == arr[e] {
isPalin(arr, s+1, e, cnt+1)
}
if arr[s] == arr[e-1] {
isPalin(arr, s, e-1, cnt+1)
}
if arr[s+1] != arr[e] && arr[s] != arr[e-1] {
return
}
}
} else {
// ์ค์ ๋ก cnt๋ 0, 1์ด์ธ์ ๊ฐ์ด ์ฌ ์ ์๋ค. ์๋ํ๋ฉด cnt๊ฐ 1์ผ๋ ์ข
๋ฃ์์ผ๋ฒ๋ฆฌ๊ธฐ ๋๋ฌธ์ด๋ค.
switch cnt {
case 0:
result = .palin
case 1:
result = .psuedo
default:
result = .etc
}
}
}
let n = Int(readLine()!)!
var result: PalinType = .etc
for _ in 0..<n {
let input = Array(readLine()!)
isPalin(input, 0, input.count-1, 0)
print(result.rawValue)
result = .etc
}
ํผ๋๋ฐฑ
1. enumํ์ ์ ์์๊ฐ์ ์ด์ฉํด์ ๋ณ์์ ์ซ์ ์ฌ์ด๋ฅผ ์ ๋์ ์ผ๋ก ์ฌ์ฉํ์.
2. ๋ชจ๋ ๊ฒฝ์ฐ์ ์๋ฅผ ํ์ํ ๋๋ ์ฌ๊ท๊ฐ ์ข๋ค.
'Algorithm' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
์นด๋ ์ญ๋ฐฐ์น - ๋ฐฑ์ค(Swift) (0) | 2022.10.08 |
---|---|
์ซ์๋ง ์ถ์ถ (0) | 2022.10.07 |
ํ๋ฌธ ๋ฌธ์์ด ๊ฒ์ฌ(Swift) (1) | 2022.10.05 |
์์ฃผํ์ง ๋ชปํ ์ ์ - ํ๋ก๊ทธ๋๋จธ์ค(python3) (0) | 2022.10.03 |
๋ฐฑ์ค - ์ฃผ์ฌ์๊ฒ์ 2476๋ฒ (Swift) (0) | 2022.10.03 |