2022. 10. 26. 16:41ใAlgorithm
๋ฌธ์ ์ด๋ฆ
๋ฌธ์ ์ค๋ช
https://www.acmicpc.net/problem/1543
1543๋ฒ: ๋ฌธ์ ๊ฒ์
์ธ์ค์ด๋ ์์ด๋ก๋ง ์ด๋ฃจ์ด์ง ์ด๋ค ๋ฌธ์๋ฅผ ๊ฒ์ํ๋ ํจ์๋ฅผ ๋ง๋ค๋ ค๊ณ ํ๋ค. ์ด ํจ์๋ ์ด๋ค ๋จ์ด๊ฐ ์ด ๋ช ๋ฒ ๋ฑ์ฅํ๋์ง ์ธ๋ ค๊ณ ํ๋ค. ๊ทธ๋ฌ๋, ์ธ์ค์ด์ ํจ์๋ ์ค๋ณต๋์ด ์ธ๋ ๊ฒ์ ๋นผ๊ณ ์ธ์ผ ํ
www.acmicpc.net
์ฒ์ ๋์ ํ์ด
์ฒ์์๋ ๋จ์ํ ์ฒซ ๋ฒ์งธ๋ถํฐ ํ์ํ์ฌ target๊ณผ ๋ง์ง์์ผ๋ฉด idx๋ฅผ ๋ฆฌ์ ํ๋ ์์ผ๋ก ๋ฌธ์ ๋ฅผ ํ์๋ค. ๊ทธ๋ฌ๋ค๊ฐ ๋๊ธด๊ฐ์ด target[idx]๊ฐ๊ณผ ๊ฐ๋ค๋ฉด ์ด์ด์ ์ธ๋ฑ์คํ์์ ํด์ค์ผํ๋ ๋ฐ๋ก๋ฅผ ์ฐพ์๋ค.
ํ์ง๋ง ๊ทธ๋๋ ํ ์คํธ์ผ์ด์ค๋ฅผ ์ ๋ถ ํต๊ณผํ์ง ๋ชปํ๋ค.
๊ทธ๋์ ๋ค๋ฅธ ์ฌ๋์ ํ์ด๋ฅผ ์ฐพ์๋ดค๋ค.
import Foundation
let document = readLine()!.map{String($0)}
let target = readLine()!.map{String($0)}
var cnt = 0
var idx = 0
for i in 0...document.count-1 {
if target[idx] == document[i] {
idx += 1
if idx == target.count {
cnt += 1
idx = 0
}
} else {
idx = 0
if target[idx] == document[i] {
idx += 1
}
}
}
print(cnt)
๋ค๋ฅธ ์ฌ๋์ ํ์ด
import Foundation
var doc = readLine()!
let target = readLine()!
var cnt = 0
var index = doc.range(of: target)?.upperBound
while index != nil {
cnt += 1
doc = String(doc[index!...])
index = doc.range(of: target)?.upperBound
}
print(cnt)
์ค์ํํธ์์ ๋ฌธ์์ด์ ์ด๋ป๊ฒ ๋ค๋ฃจ๊ณ ์๋์ง ์ ์ ์๋ ํ์ด์ด๋ค.
๋จผ์ ๋ฌธ์์ด์ ๋ํด range(of:)๋ฅผ ํ๋ฉด ๋ฐฐ์ด๋ก ๋ฐ์ก์๋ 0..<์ฐพ๋ ๋ฌธ์์ด์ ๋+1์ด ๋๋ค. ์ฆ ์ฌ๊ธฐ์ upperBound๋ฅผ ํ๊ฒ๋๋ฉด ์ฐพ๋ ๋ฌธ์์ด์ ๋ +1์ธ ์ธ๋ฑ์ค๊ฐ ๋์ค๊ฒ ๋๊ณ doc[index!...]๋ฅผ ํ๊ฒ๋๋ฉด ๊ทธ ๋ถ๋ถ๋ถํฐ ๋ค์ ๋ฌธ์์ด์ ๊ตฌ์ฑํ๊ฒ ๋๋ค.
๊ทธ๋ฆฌ๊ณ ์๋ก ์๊ฒ๋ ์ฌ์ค์
var str: String = "abc"์ผ๋ str[str.endIndex...]๋ ๋ฐํ์์๋ฌ๋ฅผ ๋ฐ์์ํค์ง ์๋ ๋ค๋ ๊ฒ์ด๋ค. ์ด ๋๋ฌธ์ ์์ while๋ฌธ์์ doc[index!...]๋ฅผ ํ ๋ index๊ฐ boundary์ธ์ ๊ฐ์ด๋ผ๋ ์๋ฌ๋ฅผ ๋ฐ์์ํค์ง ์๋๊ฒ์ด๋ค.
๋ ๋ค๋ฅธ์ฌ๋์ ํ์ด
๋์ ๋ฐฉ๋ฒ์์ ๋ฐ๋ก๋ฅผ ๋ชป์ฐพ์๋ ๊ทธ๋ฅ ์ ๋ถ๋ฅผ ํ์ํ๋ ๋ฐฉ๋ฒ์ด ์๋ค.
๊ทธ ๋ฐฉ๋ฒ์ด ์๋์ ๊ฐ์ ๋ฐฉ๋ฒ์ด๋ค.
ํญ์ ์์ ํ์๋ ๋ฐฉ๋ฒ์ด๋ผ๋ ๊ฒ์ ์ธ์งํ๊ณ ๋ฌธ์ ๋ฅผ ํ์ด์ผ๊ฒ ๋ค.
import Foundation
var doc = Array(readLine()!)
let target = Array(readLine()!)
func findMatching(_ idx: Int) -> Int {
var i = idx
var tIdx = 0
var cnt = 0
while i < doc.count {
if target[tIdx] == doc[i] {
if tIdx == target.count-1 {
cnt += 1
tIdx = 0
} else {
tIdx += 1
}
} else {
tIdx = 0
}
i += 1
}
return cnt
}
var maxVal = 0
for i in 0..<doc.count {
maxVal = max(maxVal, findMatching(i))
}
print(maxVal)
'Algorithm' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
๋ฐฑ์ค - ํ๋ ฌ(Swift) (0) | 2022.10.27 |
---|---|
๋ฐฑ์ค - ์๋ฆฌ๊ณต ํญ์น(Swift) (0) | 2022.10.26 |
๋ฐฑ์ค - ์ ๋ฌถ๊ธฐ(Swift) (0) | 2022.10.25 |
๋ฐฑ์ค - ๊ธฐํ์ค(Swift) (0) | 2022.10.25 |
๋ฐฑ์ค - ๋ณด์๋๋(Swift) (0) | 2022.10.25 |