문제


정답
따로 직원 수 만큼의 배열을 두고
1. 토요일, 일요일을 체크해서 거르기
2. 출근한 시간 -10 보다 출근 희망 시간이 클경우만 배열에 더해주기
3. 지각하지 않은 날이 5가 넘는 직원만 더해서 출력하기
순서로 작성했다.
하지만 테스트 케이스에서 몇 가지 경우에 걸렸다.
따로 테스트 케이스를 만들어 실험해본 결과

2번에서 희망 출근 시간에 10을 더했을 때 정시를 넘어가는 경우를 제대로 거르지 못 했다.
따라서 출근 시간을 기준으로 빼는 것이 아닌 희망 출근 시간에 10을 더하고 조건에 따라 더하는 방식으로 변경했다.
1. 희망 출근 시간에 10을 더할 경우 정시를 넘는 경우
1-1. 희망 출근 시간보다 출근 시간이 더 빠른 경우(정확히 말하면 시가 희망 출근 시간과 같거나 적은 경우)
1-2. 희망 출근 시간보다 출근 시간의 시가 1만 큰 경우, 분을 비교
2. 더해도 넘지 않는 경우
2-1. 이 경우에는 단순히 전체 시간에 10을 더한 후 비교하면 된다.
위와 같은 경우로 나눠 따로 계산해주었다.
최종 제출한 정답
class Solution {
public int solution(int[] schedules, int[][] timelogs, int startday) {
int answer = 0;
int[] answers = new int[schedules.length];
for(int i=0; i<schedules.length; i++) {
for(int j=0; j<timelogs[i].length; j++) {
// 토요일, 일요일 제외
if((startday+j)%7 == 6 || (startday+j)%7 == 0) {
continue;
}
// 직원별로 지각하지 않은 날만 더해주기
int time = schedules[i]%100 + 10;
if(time >= 60) { // 출근 희망 시간에 10분을 더하면 정시를 넘는 경우
if(schedules[i]/100 >= timelogs[i][j]/100) {answers[i] += 1;} // 출근 희망 시간의 시를 넘지 않으면 일찍 출근한 경우이므로 그냥 더해준다.
else if(schedules[i]/100+1 >= timelogs[i][j]/100) { // 출근 희망 시간의 시+1을 넘지 않으면서
if(time%60 >= timelogs[i][j]%100) {answers[i] += 1;} // 분이 10분을 더한 것보다 작은 경우만 더해주기
}
} else if(schedules[i]+10 >= timelogs[i][j]) { // 출근 희망 시간에 10분을 더해도 정시를 넘기지 않는 경우
answers[i] += 1;
}
}
}
for(int k=0; k<answers.length; k++) {
if(answers[k]>=5) {answer+=1;} // 5일 이상 지각하지 않은 직원만 더해주기
}
return answer;
}
}'취업 > 코딩테스트' 카테고리의 다른 글
| 프로그래머스 과일 장수 (0) | 2025.04.23 |
|---|---|
| 프로그래머스 택배 상자 꺼내기 (0) | 2025.03.27 |
| 백준[1181] 단어 정렬 (0) | 2024.08.13 |
| [미완]프로그래머스 [PCCP 기출문제] 1번/붕대감기 (0) | 2024.05.28 |
| 프로그래머스 가장 가까운 같은 글자 (3) | 2024.05.24 |