한동안 손 놨던 코테 재활하려고 백준을 다시 켰다
지금 듣는 CS 강의 후반부에 알고리즘이 있는데, 그때 알고리즘 문제들 머리로만 생각해서 풀기 위해 다시 기초문제 차근차근 풀면서 손에 익히려고 하는중
추가로 프로그래머스에 SQL 모음집이 있길래 이거도 해보고 있다
네이버 부스트캠프 후반부에서는 swift로 코테를 본다고 해서 일단 python으로 풀고 swift로 옮겨보고 있는데, swift의 언래핑 처리를 강제로 그냥 해도 될지 바인딩을 해야될지 참 의문인 부분
실제 코딩할때 강제언래핑을 잘 안쓰니까 그냥 누가 이렇게 해라!라고 말해주기 전까지는 일단은 바인딩으로 풀어보는걸로...
근데 확실히 개발 안하고 언어만 공부하고 풀 때랑, 좀 해보고 푸는거랑 느낌이랑 이해도?가 다르긴 한 것 같다... 재밌음
벨로그는 왜 토글이 안될까?
reduce()를 사용했는데, 이전에 정리했던 내용에 공식문서 공부 내용을 추가 기록용으로 정리
reduce()
는 기본적으로 받는 시퀀스의 요소들을 하나로 결합해주는 고차함수이며, 기본형은 다음과 같다.
인자로 initialResult
, nextPartialResult
를 받는데,
Result
, Self.Element
)를 받아 현재까지의 결과와 다음 값을 결합해주는 클로저가 오고, 시퀀스가 끝나면 마지막으로 결합된 값이 반환된다.import Foundation
let n = readLine()
let clothes = readLine()
let pen = readLine()
func solution() {
guard let n = n,
let clothes = clothes,
let pen = pen,
let N = Int(n) else { return }
let applicantSize = clothes.split(separator: " ").compactMap{ Int($0) }
let penList = pen.split(separator: " ").compactMap{ Int($0) }
let (T, P) = (penList[0], penList[1])
let count = applicantSize.reduce(0) { $0 + ($1 + T - 1) / T }
print(count)
print(N/P, N%P)
}
solution()
저 클로저 부분을 다음과 같이 다양하게 쓸 수 있다.
위의 이 코드를
let count = applicantSize.reduce(0) { $0 + ($1 + T - 1) / T }
다음과 같이 쓸 수도 있고,
let count = applicantSize.reduce(0, { $0 + ($1 + T - 1) / T })
공식문서처럼 한다면 이렇게 쓸 수도 있을 것이다.
let count = applicantSize.reduce(0) {result, next in
result + (next + T - 1) / T
}