풀어보니 스위프트만의 매력이 있는 것 같다. 사용할 수 있는 메소드가 있다면 최대한 사용해보려고 한다. 시간 단축에 큰 힘이 될 것 같다. import foundation
은 필요할 때와 불 필요할 때를 구분짓고 싶지만 사실 1분 1초가 급한 상황에서 그게 무슨 의미가 있을까 싶어 그냥 무조건 쓰기로 했다.
문제 모음을 활용하여 문제 순서를 정하였다. 원래 페이지 하나에 문제 하나씩 했다면 이제는 한 페이지에 모두 정리하려한다. 문자열부터 시작하여 꾸준히 풀어봐야겠다.
import Foundation
let input1 = readLine()!.split(separator: ":").map{ Int($0)! }
let input2 = readLine()!.split(separator: ":").map{ Int($0)! }
var t1 = input1[0]*3600 + input1[1]*60 + input1[2]
var t2 = input2[0]*3600 + input2[1]*60 + input2[2]
let t = t1 > t2 ? t2 + 24*3600 - t1 : t2 - t1
let h = t / 60 / 60
let m = t / 60 % 60
let s = t % 60
var ary = [h, m, s]
// 정인이는 적어도 1초를 기다리며, 많아야 24시간을 기다린다.
if h == 0 && m == 0 && s == 0 {
print("24:00:00")
} else {
print(ary.map{ String(format: "%02d", $0) }.joined(separator: ":"))
}
import Foundation
let n = Int(readLine()!)
// Int 타입은 Character 타입에 대한 변환용 이니셜라이저가 없으므로 String 타입으로 변환한 후 사용한다.
let intInput = Array(readLine()!).map { Int(String($0))! }
print(intInput.reduce(0, +))
import Foundation
while let reverseInput = readLine() {
if reverseInput == "END" {
break
}
print(String(reverseInput.reversed()))
}
import Foundation
let n = Int(readLine()!)!
for _ in 0..<n {
let input = readLine()!
var replaceString = ""
input.forEach {
if $0 == " " {
return
}
replaceString += String($0)
}
var maxCnt: Int = 0
var answerLetter = " "
var letterDict: [String: Int] = [:]
for val in replaceString {
letterDict[String(val), default: 0] += 1
}
for (i, c) in letterDict {
if c == letterDict.values.max() {
maxCnt += 1
answerLetter = String(i)
}
}
if maxCnt > 1 {
print("?")
} else {
print(answerLetter)
}
}
import Foundation
let n = Int(readLine()!)!
for _ in 0..<n {
var input = readLine()!
input = input.replacingOccurrences(of: " ", with: "")
let letterCount = input.reduce(into: [:]) { counts, letter in
counts[letter, default: 0] += 1
}
var maxCnt: Int = 0
var answerLetter = " "
for (i, c) in letterCount {
if c == letterCount.values.max() {
maxCnt += 1
answerLetter = String(i)
}
}
if maxCnt > 1 {
print("?")
} else {
print(answerLetter)
}
}
import Foundation
var maxLen = 0
var array: [[Character]] = []
var answer = ""
for _ in 0..<5 {
let input = readLine()!
let inputAry = Array(input)
maxLen = max(inputAry.count, maxLen)
array.append(inputAry)
}
for i in 0..<maxLen {
for j in 0..<5 {
if array[j].count <= i {
continue
}
answer += String(array[j][i])
}
}
print(answer)
import Foundation
let dict: [Character:Int] = ["A":3, "B":2, "C":1, "D":2, "E":3, "F":3, \
"G":3, "H":3, "I":1, "J":1, "K":3, "L":1, "M":3, "N":3, "O":1, "P":2, \
"Q":2, "R":2, "S":1, "T":2, "U":1, "V":1, "W":2, "X":2, "Y":2, "Z":1]
let input = Array(readLine()!)
var totalSum = 0
for alpha in input {
totalSum += dict[alpha, default:0]
}
if (totalSum % 10) % 2 == 1 {
print("I'm a winner!")
} else {
print("You're the winner?")
}
import Foundation
let N = Int(readLine()!)!
var answer = 0
var i = 1
var sum = 0
while(true) {
sum += i
answer += 1
i += 1
if sum >= N {
if sum == N {
break
}
answer -= 1
break
}
}
print(answer)
import Foundation
let n = UInt64(readLine()!)!
var start:UInt64 = 0
var end = UInt64(sqrt(Double(UInt64.max))) + 1
if n == 0 {
print(0)
} else {
while (start <= end) {
let mid = (start + end) / 2
if n <= mid * mid {
end = mid - 1
} else {
start = mid + 1
}
}
print(end + 1)
}
import Foundation
let n = Int(readLine()!)!
var myCard = readLine()!.split(separator: " ").map{ Int($0)! }
let m = Int(readLine()!)!
var checkCard = readLine()!.split(separator: " ").map{ Int($0)! }
myCard.sort()
for card in checkCard {
var start = myCard.startIndex
var end = myCard.endIndex - 1
// end = n - 1
// sequence.endIndex = sequence의 마지막 인덱스 + 1
var flag = false
while (start <= end) {
let mid = (start + end) / 2
if myCard[mid] >= card {
if myCard[mid] == card {
flag = true
}
end = mid - 1
} else {
start = mid + 1
}
}
if flag {
print(1, terminator: " ")
} else {
print(0, terminator: " ")
}
}