728x90
반응형
https://github.com/ROUTINE-STUDY/Algorithm
알고리즘 스터디를 진행하고 있습니다. 😊
초보들로 구성되어있으며, 열심히 풀어보고 풀이 방식을 공유하고 피드백을 해주는 스터디입니다.
참여 문의는 댓글 혹은 GitHub 주소를 참고해주세요.
문제 출처 : https://school.programmers.co.kr/learn/courses/30/lessons/133501
내 코드(JAVA)
class Guards {
static class Guard {
private int[] scope;
private int[] times;
private Queue<String> workList = new ArrayDeque<>();
private boolean isWatch;
public Guard(int[] scope, int[] times) {
this.scope = scope;
this.times = times;
for (int i = 0; i < times.length; i++) {
String status = i == 0 ? "WORK" : "REST";
for (int j = 0; j < times[i]; j++) {
workList.add(status);
}
}
}
public void writeWorkList() {
for (int i = 0; i < times.length; i++) {
String status = i == 0 ? "WORK" : "REST";
for (int j = 0; j < times[i]; j++) {
workList.add(status);
}
}
}
}
List<Guard> guardList = new ArrayList<>();
/**
* 경비병 추가
*/
public void addGuard(int[][] scope, int[][] times) {
for (int i = 0; i < scope.length; i++) {
guardList.add(new Guard(scope[i], times[i]));
}
}
/**
* 경비병 상태 수정
*/
public void moveGuard() {
for (Guard guard : guardList) {
if (guard.workList.isEmpty()) {
guard.writeWorkList();
}
String status = guard.workList.poll();
guard.isWatch = "WORK".equals(status);
}
}
/**
* 현재 거리에 경비병이 근무중인지 확인하는 메서드
*/
public boolean checkGuard(int distinct) {
for (Guard guard : guardList) {
if (guard.isWatch) {
int scopeStart = guard.scope[0];
int scopeEnd = guard.scope[1];
if ((scopeStart <= distinct && scopeEnd >= distinct) || (scopeEnd <= distinct && scopeStart >= distinct)) {
return true;
}
}
}
return false;
}
}
public int solution(int distance, int[][] scope, int[][] times) {
int answer = 0;
Guards guards = new Guards();
guards.addGuard(scope, times);
while (answer < distance) {
answer++;
guards.moveGuard();
if (guards.checkGuard(answer)) {
break;
}
}
System.out.println(answer);
return answer;
}
728x90
반응형
'알고리즘' 카테고리의 다른 글
[프로그래머스/JAVA] 달리기 경주 (0) | 2023.11.08 |
---|---|
[프로그래머스/JAVA] 개인정보 수집 유효기간 (0) | 2023.08.04 |
[프로그래머스/JAVA] 주차 요금 계산 (0) | 2022.10.09 |
[프로그래머스/JAVA] 성격 유형 검사하기 (0) | 2022.10.02 |
[백준/JAVA] 1978. 소수 찾기 (0) | 2022.07.16 |
댓글