https://www.acmicpc.net/problem/13300
13300번: 방 배정
표준 입력으로 다음 정보가 주어진다. 첫 번째 줄에는 수학여행에 참가하는 학생 수를 나타내는 정수 N(1 ≤ N ≤ 1,000)과 한 방에 배정할 수 있는 최대 인원 수 K(1 < K ≤ 1,000)가 공백으로 분리되어
www.acmicpc.net
c++만 하다가 swift로 하려고 하니... 시간이 더 걸렸다...^^
헷갈려~~ 그래도 이제 입력은 익숙해진...ㅎ
2차원 배열을 만들어서 성별행, 학년열로 개수 카운팅
k보다 작으면 1 추가, 그 이상이면 딱 나눠지면 상관없지만 나머지 학생이 있을 수 있으므로 남은 애들을 위한 방 추가하기
1 ) studenNumber / k
만약 5명을 3명씩 넣는다면 5 / 3 = 1 인데 나머지 학생은 어디서 자?
이 공식은 아님
2 ) studentNumber / k + 1
만약 5명을 3명씩 넣는다면 5 / 3 + 1 = 2 인데, 4명을 3명씩 넣는다면 4 / 3 + 1 = 2
6명을 3명씩 넣는다면 6 / 3 + 1 = 3.. 누굴 위한 방인가
이 공식도 아님
3 ) (studentNumber + 1) / k
만약 5명을 3명씩 넣는다면 6 / 3 = 2 인데, 4명을 3명씩 넣는다면 5 / 3 = 1 나머지 한명 탈락ㅠ
이 공식도 아님
4) (studentNumber - 1) / k + 1
만약 5명을 3명씩 넣는다면 4 / 3 + 1 = 2 인데, 4명을 3명씩 넣는다면 3 / 3 + 1 = 2
6명을 3명씩 넣는다면 5 / 3 + 1 = 2
드디어!
import Foundation
/*
성별끼리, 같은 학년끼리
한방에 배정할 수 있는 최대 인원 수 K
모든 학생을 배정하기 위해 필요한 방의 최소 개수 구하기
*/
var answer = 0
let nk = readLine()!.split(separator: " ").map{Int(String($0))!}
var student = Array(repeating: Array(repeating: 0, count: 7), count: 2)
for _ in 0..<nk[0] {
let st = readLine()!.split(separator: " ").map{Int(String($0))!}
student[st[0]][st[1]] += 1
}
for i in 0..<2 {
for j in 1...6 {
guard student[i][j] != 0 else { continue }
answer += student[i][j] < nk[1] ? 1 : (student[i][j] - 1) / nk[1] + 1
}
}
print(answer)
'알고리즘 > 백준' 카테고리의 다른 글
[백준/Swift] 1919번: 애너그램 만들기 (0) | 2022.12.13 |
---|---|
[백준/swift] 11328번: Strfry (0) | 2022.12.13 |
[백준/swift] 1475번: 방 번호 (0) | 2022.12.13 |
[백준/c++] 14500번: 테트로미노 (0) | 2022.11.24 |
[백준/c++] 3190번: 뱀 (0) | 2022.11.23 |