https://school.programmers.co.kr/learn/courses/30/lessons/388351
프로그래머스
SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프
programmers.co.kr

문제 요약
자신이 설정한 출근 희망 시간 + 10까지 어플로 출근
희망 시각이 9시 58분이면 10시 8분까지 출근
토, 일은 예외 매일 한 번씩 출근, 모든 시각은 시간에 100을 곱하고 분을 더한 정수로 표현
-> 10시 13분은 1013, 9시 58분은 958
실제로 늦지 않고 출근한 직원이 몇명인지 구하기
schedules: 출근 희망 시각을 담은 배열
timelogs: 직원들이 일주일 동안 출근한 시각을 담은 2차원 배열
startday: 이벤트를 시작한 요일을 의미 (1...7) -> 6, 7은 토요일, 일요일이므로 제외해야 함
상품을 받을 직원의 수 return
첫 번재 시도
import Foundation
func solution(_ schedules:[Int], _ timelogs:[[Int]], _ startday:Int) -> Int {
let maxSchedules = schedules.map{$0 + 10} // 최대 출근 시간
var answer = 0 // 상품을 받을 직원의 수
for i in 0..<schedules.count { // 직원의 수 만큼 반복
var isSuccess = true
for j in 0..<7 { // 일주일 동안 반복
var day = (j + startday) % 7 // 실제 요일
day = day == 0 ? 7 : day // 일요일은 0이 아닌 7이므로 예외 처리
if (6...7).contains(day) { continue } // 토요일, 일요일 제외
if timelogs[i][j] > maxSchedules[i] { // 정시 출근을 하지 못했으면 실패
isSuccess = false
break
}
}
if isSuccess { answer += 1 }
}
return answer
}
35/42 → 7문제나 틀렸다
예외가 뭐가 있을까
→ schedules에 10을 더한다고 해서 시간이 바뀌지 않는다
시간과 분을 따로 구해야 함
예를들어 9시 55분까지 출근한다고 가정하면 최대 10시 5분까지인데 현재는 9시 65분까지로 구하고 있었다
따라서 시간과 분을 분리하여 계산하고 분이 60을 넘기면 시간을 올려줘야 함
두 번째 시도
import Foundation
func solution(_ schedules:[Int], _ timelogs:[[Int]], _ startday:Int) -> Int {
var maxSchedules = [Int]() // 최대 출근 시간
for schedule in schedules {
var time = schedule / 100 // 시간만 추출
var minute = schedule % 100 + 10 // 분 추출 후 10분 더해줌
if minute >= 60 { // 60분 이상이면 시간을 올려줌
time += 1
minute -= 60
}
maxSchedules.append(time * 100 + minute)
}
var answer = 0 // 상품을 받을 직원의 수
for i in 0..<schedules.count { // 직원의 수 만큼 반복
var isSuccess = true
for j in 0..<7 { // 일주일 동안 반복
var day = (j + startday) % 7 // 실제 요일
day = day == 0 ? 7 : day // 일요일은 0이 아닌 7이므로 예외 처리
if (6...7).contains(day) { continue } // 토요일, 일요일 제외
if timelogs[i][j] > maxSchedules[i] { // 정시 출근을 하지 못했으면 실패
isSuccess = false
break
}
}
if isSuccess { answer += 1 }
}
return answer
}

'알고리즘 문제(Swift)' 카테고리의 다른 글
프로그래머스: 단어 변환(DFS + String.Index) (0) | 2025.03.19 |
---|---|
프로그래머스 - 네트워크(43162) (1) | 2025.03.17 |
알고리즘 문제(Swift) - 프로그래머스: 여행 경로 (1) | 2025.03.12 |
알고리즘 문제(Swift) - 백준 - 1932 (정수 삼각형) (1) | 2025.01.10 |
알고리즘 문제(Swift) - 백준 - 2579 (계단 오르기) (0) | 2025.01.10 |