728x90
반응형
728x90
[Programmers] 유연근무제 - LV 1
접근
- 구현
풀이
2025 프로그래머스 코드챌린지 문제가 업데이트되어 하나씩 풀어 볼 예정이다. 이번 문제는 1차 예선의 가장 쉬운 문제인 유연근무제이다. 주어지는 출근 시간을 기준으로 +10분까지 정시 출근으로 인정이 되고 일주일 동안 평일을 모두 정시 출근에 성공하는 경우 선물을 받게 된다. 선물을 받게 되는 직원의 수를 구해야 하는 문제로 간단한 문제이다.
public int solution(int[] schedules, int[][] timelogs, int startday) {
int answer = 0;
for (int i = 0; i < schedules.length; i++) {
int[] timelog = timelogs[i];
int schedule = getSchedule(schedules[i]);
int day = startday;
for (int t : timelog) {
if (day % 7 == 0 || day % 7 == 6) {
day++;
continue;
}
if (t > schedule) {
break;
}
day++;
}
if (day == startday + 7) {
answer++;
}
}
return answer;
}
코드는 간단하기 때문에 핵심이라 생각되는 몇 개만 보면 될 것 같다. 출근으로 정한 시간 +10분 이내에 출근이 되어야 인정이 되고 평일만 해당하기 때문에 주말은 포함되지 않는다. 요일은 1이 월요일로 6, 7이 토, 일 즉 주말이므로 요일을 7로 나눠 주말의 경우 건너뛰어줬다. 정시 출근에 하루라도 실패하게 되면 루프를 종료시켜 줬고 평일 출근에 다 성공한 경우 answer를 증가시켜 줬다.
private int getSchedule(int schedule) {
schedule += 10;
if (schedule % 100 >= 60) {
int h = (schedule / 100) + 1;
int m = (schedule % 100) - 60;
schedule = (h * 100) + m;
}
return schedule;
}
제일 중요한 부분이라면 10분을 더하는 부분인데 시간의 형태가 시간 * 100 + 분의 형태로 주어지고 60분이 넘어가는 경우 올림이 발생하기 때문에 해당 처리를 확실하게 해주어야 한다.
전체 코드
class Solution {
public int solution(int[] schedules, int[][] timelogs, int startday) {
int answer = 0;
for (int i = 0; i < schedules.length; i++) {
int[] timelog = timelogs[i];
int schedule = getSchedule(schedules[i]);
int day = startday;
for (int t : timelog) {
if (day % 7 == 0 || day % 7 == 6) {
day++;
continue;
}
if (t > schedule) {
break;
}
day++;
}
if (day == startday + 7) {
answer++;
}
}
return answer;
}
private int getSchedule(int schedule) {
schedule += 10;
if (schedule % 100 >= 60) {
int h = (schedule / 100) + 1;
int m = (schedule % 100) - 60;
schedule = (h * 100) + m;
}
return schedule;
}
}
728x90
'알고리즘 > 코딩테스트-Programmers' 카테고리의 다른 글
[Programmers] 지게차와 크레인 JAVA (0) | 2025.03.07 |
---|---|
[Programmers] 비밀 코드 해독 JAVA (0) | 2025.03.06 |
[Programmers] 전력망을 둘로 나누기 JAVA (1) | 2025.02.06 |
[Programmers] 베스트앨범 JAVA (1) | 2025.02.05 |
[Programmers] 구명보트 JAVA (1) | 2025.02.04 |