-
프로그래머스 : 기능개발코딩테스트 문제 풀이/프로그래머스 2023. 11. 20. 00:01
문제 설명
내 코드
class Solution { public static int[] solution(int[] progresses, int[] speeds) { int[] answer = {}; for (int i = 0; i < progresses.length; i++) { progresses[i] = ((100 - progresses[i]) % speeds[i] == 0) ? (100 - progresses[i]) / speeds[i] : (100 - progresses[i]) / speeds[i] + 1; } int cnt = 0; for (int i = 0; i < progresses.length; i++) { if (progresses[i] == 0) continue; cnt++; for (int j = i + 1; j < progresses.length; j++) { if (progresses[j] < progresses[i]) progresses[j] = 0; else progresses[j] -= progresses[i]; } progresses[i] = 0; for (int j = i; j < progresses.length; j++) { if (progresses[j] > 0) break; progresses[i]++; } } answer = new int[cnt]; cnt = 0; for (int i = 0; i < progresses.length; i++) { if (progresses[i] > 0) answer[cnt++] = progresses[i]; } return answer; } }
✏️
class Solution { public static int[] solution(int[] progresses, int[] speeds) { int[] answer = {}; // 각각 작업 소요 기간으로 덮어쓰기 for (int i = 0; i < progresses.length; i++) { // 100 - progresses[i] = 100% - 작업_진행_진도율 // (100 - progresses[i]) % speeds[i] = n.n일을 찾기 위함! n.n일이면 +1 progresses[i] = ((100 - progresses[i]) % speeds[i] == 0) ? (100 - progresses[i]) / speeds[i] : (100 - progresses[i]) / speeds[i] + 1; } // 배포되는 날짜 카운팅 int cnt = 0; for (int i = 0; i < progresses.length; i++) { // (progresses[i] == 0)이면 배포할게 없는 작업(이미 배포됨) if (progresses[i] == 0) continue; // 위에 if문을 지나서 여기로 온거면 배포할게 있는날로, cnt += 1 cnt++; // j는 i+1부터 마지막작업일까지 체크 // 왜냐하면 0 ~ i-1 까지는 이미 배포 확인된 작업이고 // i는 남은 작업일의 작업완료일을 계산해야하기 때문에, // 이번 for문에서 함께 계산해버리면 뒷부분을 계산할 수 없다. 그래서 j = i + 1 for (int j = i + 1; j < progresses.length; j++) { // j 작업의 완료일이 i작업의 완료일보다 적으면 // i 작업의 배포가 완료될때 함께 완료될수있으므로 0 줌 if (progresses[j] < progresses[i]) progresses[j] = 0; else progresses[j] -= progresses[i]; // else 면 j 작업의 완료 소요일이 i 작업보다 긴것으로, // j 작업 소요일수에서 i작업 소요일수를 빼줌 // 왜냐하면 모든 작업은 큐가 돌아가는날 다같이 카운팅되니깐! } // i일이 배포되는동안 나머지 작업의 배포 상태 계산을 완료한 상태이기때문에 // i일도 0 줌 progresses[i] = 0; // 아래 for문은 i가 배포완료된 날 함께 완료된 다른 작업물의 수량을 세기 위함 // 해당 작업인 i가 이미 0으로 초기화 되었기 때문에, // for문은 i부터 작업이 아직 안끝난(j > 0) 것을 만날때까지 +1 해줌 for (int j = i; j < progresses.length; j++) { if (progresses[j] > 0) break; progresses[i]++; } } // 아래는 결과를 담을 answer 배열을 만들고 값을 옮기는 작업 answer = new int[cnt]; cnt = 0; for (int i = 0; i < progresses.length; i++) { if (progresses[i] > 0) answer[cnt++] = progresses[i]; } return answer; } }
💪
'코딩테스트 문제 풀이 > 프로그래머스' 카테고리의 다른 글
프로그래머스 : K번째 수 (0) 2023.11.21 프로그래머스 : 프린터 (0) 2023.11.20 프로그래머스 : 위장 (0) 2023.11.20 프로그래머스 : 나누어 떨어지는 숫자 배열 (0) 2023.11.20 프로그래머스 : 같은 숫자는 싫어 (0) 2023.11.20