일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |
- React Native
- 프로그래머스
- 자바스크립트
- 프로젝트
- node.js
- java
- controller
- 자바
- project
- ReactNative
- javascript
- 리액트 네이티브
- 티스토리챌린지
- 스프링
- 오블완
- 코딩
- map
- 리액트네이티브
- 태그
- 백엔드
- firebase
- React
- 2025 프로그래머스 코드챌린지 2차 예선
- Spring
- PCCE
- 코딩테스트
- 리액트
- 코테
- expo
- 파이어베이스
- Today
- Total
양갱의 개발 블로그
[프로그래머스] [2025 프로그래머스 코드챌린지 2차 예선] 유연근무제(Java) 본문
https://school.programmers.co.kr/learn/courses/30/lessons/388351
프로그래머스
SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프
programmers.co.kr

확인 내용
1. 시간을 계산하는 프로세스 확인
2. 주말인 index는 무시해야합니다.
시간을 계산하는 프로세스
현재 시간이 14:02라면 1402로 계산됩니다. 출근 인정 시간은 +10분이기 때문에 14:12분, 1412까지 가능합니다.
하지만 만약, 14:50이거나 14:58분이라면 출근 인정시간은 1500, 1508이어야 합니다. 59이하만 가능하다는 것입니다. 게산하게 되면 출근 시간(4자리수 ex)1402)은 100으로 나눈 나머지 값이 60이상이라면 몫에 +1을 하고 60을 빼야겠죠?
저는 계산할 때 출근 인정되는 시간을 시기준으로 먼저 계산하고 60분 이상이라면 계산하는 과정을 거쳤습니다.
admitTime = schedules[i] + 10; // 출근 인정 시간 계산
if (admitTime%100 >= 60) {
admithun = admitTime/100;
admitTime = admithun*100 + 100 + (admitTime%100)-60;
}
그리고 주말을 제외해야하기 때문에
초기 코드(테스트 케이스 실패)
class Solution {
public int solution(int[] schedules, int[][] timelogs, int startday) {
int answer = 0;
// 출근 인정 시간 구하기
// timelogs의 값 중에서 넘은 시간이 있는지 확인
// startday 확인하기 금요일인 경우는 주말인 1,2 인덱스는 무시?
// 없으면 answer+1
int admitTime=0;
int admithun=0;
for (int i = 0; i < schedules.length; i++) {
boolean success=true;
admitTime = schedules[i] + 10; // 출근 인정 시간 계산
if (admitTime%100 >= 60) {
admithun = admitTime/100;
admitTime = admithun*100 + 100 + (admitTime%100)-60;
}
for (int j=0; j<timelogs[i].length; j++){
// 주말의 인덱스는 무시해야 함
if(6-startday == j || 7-startday == j) continue;
// 평일
if (timelogs[i][j] > admitTime) {
success=false;
break;
}
}
if (success) answer++;
}
return answer;
}
}
이렇게 풀었을 대 19번, 38번, 40번, 42번에서 오류가 났습니다.
질문하기에서 봤었을 땐 주말의 인덱스를 제외시키는 코드에서 오류가 생긴거라고 말씀하셨습니다!
startday가 1이면 월요일, 5이면 금요일, 6이면 토요일, 7이면 일요일 이기 때문에
7로 나누었을 때 나머지가 0이거나 6이면 주말로 인식합니다.
그리고 그 날은 무시하는 방법입니다.
최종 코드
class Solution {
public int solution(int[] schedules, int[][] timelogs, int startday) {
int answer = 0;
// 출근 인정 시간 구하기
// timelogs의 값 중에서 넘은 시간이 있는지 확인
// startday 확인하기 금요일인 경우는 주말인 1,2 인덱스는 무시?
// 없으면 answer+1
int admitTime=0;
int admithun=0;
for (int i = 0; i < schedules.length; i++) {
boolean success=true;
int day = startday;
admitTime = schedules[i] + 10; // 출근 인정 시간 계산
if (admitTime%100 >= 60) {
admithun = admitTime/100;
admitTime = admithun*100 + 100 + (admitTime%100)-60;
}
for (int j=0; j<timelogs[i].length; j++){
// 주말의 인덱스는 무시해야 함
// startday=1이면, 월요일 -> 인덱스 5,6 무시
// startday=2이면, 화요일 -> 인덱스 4,5 무시
// startday=3이면, 수요일 -> 인덱스 3,4 무시
if(day%7 == 0 || day%7 == 6) {
day++;
continue;
}
// 평일
if (timelogs[i][j] > admitTime) {
success=false;
break;
}
day++;
}
if (success) answer++;
}
return answer;
}
}
주말 계산 참고 블로그 :
'코딩테스트 > 프로그래머스' 카테고리의 다른 글
[프로그래머스] [PCCE 기출문제] 10번 / 데이터 분석(Java) (0) | 2025.03.29 |
---|---|
[프로그래머스] [2025 프로그래머스 코드챌린지 2차 예선] 서버 증설 횟수(Java) (0) | 2025.03.27 |
[프로그래머스] [2025 프로그래머스 코드챌린지 2차 예선] 택배 상자 꺼내기(Java) (0) | 2025.03.25 |
[프로그래머스] [PCCE 기출문제] 9번 / 이웃한 칸 (Java) (0) | 2024.11.16 |
[프로그래머스] [PCCE 기출문제] 10번 / 공원(Java), (feat.90점) (0) | 2024.11.14 |