728x90
반응형
반성하는 마음으로 코딩테스트 기록을 박제ㅎㅎ
스택/큐 > 프린터 입니다.
문제
미
리
보
기
방
지
나만의 풀이
class Solution {
public int solution(int[] priorities, int location) {
int answer = 0;
int i = 0;
while(true){
if(checkNum(priorities, priorities[i])){
answer++;
priorities[i] = 0;
if(location == i) break;
}
if(++i == priorities.length) i = 0;
}
return answer;
}
private boolean checkNum(int[] list, int num){
for(int li : list)
if(li > num) return false;
return true;
}
}
해설 ↓
더보기
문제를 다 풀고나면 다른 사람 코드를 볼 수 있어 살펴보았는데
아무래도 큐, 스택 문제여서 큐를 사용한 사람도 있었고,
컬렉션(리스트)을 사용하여 진짜 문제처럼 뺑뺑 돌려서 푼 분도 있었는데,
저는 이 문제는 굳이 컬렉션을 쓰지 않아도 될 것 같아 배열 그대로 풀어보았습니다!
class Solution {
public int solution(int[] priorities, int location) {
int answer = 0;
int i = 0;
while(true){
// ① checkNum에 배열과, 현재 비교하려는 수를 인자값으로 넣어줍니다.
if(checkNum(priorities, priorities[i])){
// ③ 위의 조건문이 true 라면, 이번 차례였던 인쇄물이 우선순위가 가장 커서
// 출력이 되었다는 뜻이므로
answer++; // ④ 카운트 해줍니다.
// answewr은 몇 번째로 프린트 되었는지 카운트하기 위한 변수입니다.
// ⑤ 이번에 출력된 프린트물의 우선순위는 0으로 바꿔줍니다.
priorities[i] = 0;
// ⑥ 이번에 출력했던 인쇄물이 내가 뽑으려 했던 인쇄물이라면 반복문을 종료시킵니다.
if(location == i) break;
}
// ⑦ 반복문이 아직 종료되지 않았다면 다음 인쇄물을 체크하기 위해 i를 증가시켜주고
// i가 index 범위를 초과했다면 0으로 초기화 해줍니다.
if(++i == priorities.length) i = 0;
}
return answer;
}
// ② 이 메서드는 num이 배열에 있는 수 중에 제일 크다면 true, 작다면 false를 반환합니다.
private boolean checkNum(int[] list, int num){
for(int li : list)
if(li > num) return false;
return true;
}
}
728x90
반응형
'IT > 코딩 테스트 연습' 카테고리의 다른 글
프로그래머스 코딩 테스트 - 124나라 (2) | 2021.01.18 |
---|