8958번: OX퀴즈
처음 풀이
let T = Int(readLine()!)!
(0..<T).forEach { _ in
let input = readLine()!
var finalScore = 0
var currentScore = 0
for char in input {
if char == "O" {
currentScore += 1
finalScore += currentScore
} else {
currentScore = 0
}
}
print(finalScore)
}
- String을 반복문으로 돌면서 O이 나올 때 마다 현재 점수를 계산해서 최종 점수에 더하고 X가 나오면 현재 점수를 0으로 되돌려 놓는 방식
- 💡 String은 index로 접근은 안되지만 반복문은 사용할 수 있음!
숏코딩
let T = Int(readLine()!)!
(0..<T).forEach { _ in
print(readLine()!.split(separator: "X").reduce(0) {
$0 + ($1.count * ($1.count + 1)) / 2
})
}
- O이 연속된 갯수 n만큼 1 + 2 + .. + n의 점수를 얻는 방식 (= 등차수열의 합)
- 들어온 입력을 X로 구분해서 [String]으로 바꾸고 O의 길이만큼 등차수열 공식을 활용해서 점수 계산하기