注意事項
本記事は復習のための日記的なものであり、丁寧な解説を求めている方には不十分かと思われますので、ご了承のほどお願いいたします。
正解済み問題
A - camel Case
問題文
こちら問題ページ
解答
受け取った文字列の内に何文字大文字があるかを判定。
文字列をfor分で1文字ずつ流して、String側の標準APIのisUppercaseを使用することで大文字か判定。
最終的に集計した値を出力することで解答。
let S = readLine()!
var counter = 1
for str in S {
if str.isUppercase {
break
}
counter += 1
}
print(counter)
B - Trimmed Mean
問題文
こちら問題ページ
解答
入力値Nの数分の最小値と最大値を入力値xArrayから取り除き、残されてた値の平均値を求める処理。
N回ループを回し、xArrayから最大値と最小値のIndexを見つけ取り除いていく。
最終的に残された値の合計をreduceでも求めて、あとは残された値の数で割って、平均値を出力する。
let N = Int(readLine()!)!
var xArray = readLine()!.split(separator: " ").map{Int($0)!}
for _ in 0..<N {
let maxValue = xArray.max()
let minValue = xArray.min()
if let index = xArray.firstIndex(where: { $0 == maxValue }) {
xArray.remove(at: index)
}
if let index = xArray.firstIndex(where: { $0 == minValue }) {
xArray.remove(at: index)
}
}
print(Float(xArray.reduce(0, +)) / Float(xArray.count))
誤答及び、未解答問題
C - LRUD Instructions 2
問題文
こちら問題ページ
誤答
実行時間制限超過により誤答。
N個の文字列Sは「RLUD」で構成されており、
Rの場合はx座標を+1
Lの場合はx座標をー1
Uの場合はy座標を+1
Dの場合はy座標をー1
する。
最終的に座標移動開始から終了まで、同じ座標を踏んだかを判定する。
let N = Int(readLine()!)!
let S = Array(readLine()!)
var xy = [0, 0]
var xyHistory = ["00"]
var isPositioned = false
for num in 0..<N {
if S[num] == "R" {xy[0] += 1}
else if S[num] == "L" {xy[0] -= 1}
else if S[num] == "U" {xy[1] += 1}
else if S[num] == "D" {xy[1] -= 1}
if xyHistory.contains("\(xy[0])" + "\(xy[1])") {
isPositioned = true
break
} else {
xyHistory.append("\(xy[0])" + "\(xy[1])")
}
}
print(isPositioned ? "Yes" : "No")
正答
原因は過去の座標入れている変数にSetを使用していなかったのが、原因みたいです。
Setにしないと処理速度が遅くなるみたいですね。
let N = Int(readLine()!)!
let S = Array(readLine()!)
var xy = [0, 0]
var visited: Set<[Int]> = [[0, 0]]
var isPositioned = false
for num in 0..<N {
if S[num] == "R" {xy[0] += 1}
else if S[num] == "L" {xy[0] -= 1}
else if S[num] == "U" {xy[1] += 1}
else if S[num] == "D" {xy[1] -= 1}
if visited.contains([xy[0], xy[1]]) {
isPositioned = true
break
}
visited.insert([xy[0], xy[1]])
}
print(isPositioned ? "Yes" : "No")
参考
https://atcoder.jp/contests/abc291
https://qiita.com/Saayaman/items/4f3f63048d1d5924a829#set%E3%81%AB%E8%A4%87%E6%95%B0%E3%81%AE%E3%83%87%E3%83%BC%E3%82%BF%E3%82%BF%E3%82%A4%E3%83%97%E3%81%AF%E4%BF%9D%E5%AD%98%E3%81%A7%E3%81%8D%E3%82%8B%E3%81%AE
https://qiita.com/KyoheiG3/items/0bf9887a55fe7ad05811