Solved.ac 클래스 1 마무리

Choong Won, Seo·2021년 12월 18일
0

백준

목록 보기
1/30

Today 12/18

최소 최대 (My Code)

let intNum = Int(readLine()!)!
let intArr = readLine()!.split(separator: " ").map{Int(String($0))!}

var minimum = intArr[0]
var maximum = intArr[0]

for index in 1...intNum {
    if intArr[index-1] < minimum {
        minimum = intArr[index-1]
    }
    if intArr[index-1] > maximum {
        maximum = intArr[index-1]
    }
}

print(minimum, maximum, separator: " ")
let intNum = Int(readLine()!)!
let intArr = readLine()!.split(separator: " ").map{Int(String($0))!}

print(intArr.min(), intArr.max(), separator: " ")

간결하게 표현 가능하다.

사칙 연산 (My Code)

let numArr = readLine()!.split(separator: " ").map{Int(String($0))!}
let sum = numArr[0] + numArr[1]
let min = numArr[0] - numArr[1]
let dup = numArr[0] * numArr[1]
let div = numArr[0] / numArr[1]
let rem = numArr[0] % numArr[1]

print(sum, min, dup, div, rem, separator: "\n")

X보다 작은 수 (My Code)

let pivot = readLine()!.split(separator: " ").map{Int(String($0))!}
let numArr = readLine()!.split(separator: " ").map{Int(String($0))!}.filter{$0 < pivot[1]}

print(numArr.map{String($0)}.joined(separator: " "))
let pivot = readLine()!.split(separator: " ").map{Int(String($0))!}
print(readLine()!.split(separator: " ").map{Int(String($0))!}.filter{$0 < pivot[1]}.map{String($0)}.joined(separator: " "))

극단적으로 줄이면 이렇게 된다.

A+B - 3 (My Code)

let num = Int(readLine()!)!
for _ in 1...num {
    let numArr = readLine()!.split(separator: " ").map{Int(String($0))!}
    let sum = numArr[0] + numArr[1]
    print(sum)
}
let num = Int(readLine()!)!
for index in 1...num {
    print(readLine()!.split(separator: " ").map{Int(String($0))!}.reduce(0){$0 + $1})
}

극단적으로 줄이면 이렇게 된다.

reduce는 괄호 안에 처음 값이 있어야 한다. reduce(0)

A+B - 4 (My Code)

while let input = readLine() {
    print(input.split(separator: " ").map{Int(String($0))!}.reduce(0){$0 + $1})
}

while let input = readLine()을 생각하는게 어려웠다.

while true {
    let input = readLine()!
    if input == "" { break }
    print(input.split(separator: " ").map{Int(String($0))!}.reduce(0){$0 + $1})
}

이건 시행착오였는데, 옵셔널 체이닝을 해줘서 아무 것도 들어오지 않았을 때에는 런타임 에러가 발생했다.

while true {
    guard let input = readLine() else { break }
    print(input.split(separator: " ").map{Int(String($0))!}.reduce(0){$0 + $1})
}

이를 해결하기 위해 guard let을 사용해서 이런 식으로 해결할 수 있었다.

A+B - 5 (My Code)

while true {
    let input = readLine()!
    if input = "0 0" { break }
    print(input.split(separator: " ").map{Int(String($0))!}.reduce(0){$0 + $1})
}

위의 문제와 같은 방법대로

위 문제와 다른 점은 아무것도 들어오지 않는 대신 0 0이 들어오니 그냥 옵셔널 체이닝을 사용해주면 된다.

AxB (My Code)

print(readLine()!.split(separator: " ").map{Int(String($0))!}.reduce(1){$0*$1})

아스키 코드 (My Code)

print(Character(readLine()!).asciiValue!)

Character 타입으로 변경해주고 asciiValue 함수를 사용하여 값을 구한다.

asciiValue는 옵셔널 타입이므로 옵셔널 체이닝을 사용한다.

숫자의 합 (My Code)

let _ = Int(readLine()!)!
print(readLine()!.map{Int(String($0))!}.reduce(0,+))

Swift3 ) How to convert string to an array in Swift ( 문자열을 배열로 바꾸는 방법)

String을 Character로 바꾸는 방법을 고민하다가 구글링을 해봤다. 원래는 Characters를 쓰면 가능했지만, 9.2부터 없어지고, 대신 그냥 map{String($0)}을 하거나 Array($0)만 해줘도 자동으로 Character로 변환된다고 한다.

또, reduce(0){$0+$1}를 더 간결하게 그냥 reduce(0,+)로 사용할 수도 있다는 것을 알았다.

profile
UXUI Design Based IOS Developer

0개의 댓글