기능개발 1

최진훈·2022년 3월 21일
0

programmers

목록 보기
55/73

이번 문제는 카테고리가 스택/큐 였지만 문제를 읽어보다보니 굳이 스택이나 큐를 사용하지 않고도 풀 수 있을 것 같다는 생각이 들었다. 결국 중요한건 작업이 배포되기까지의 시간이기 때문에 그 시간만 구해서 잘 비교하면 될 것 같다. 정리해보자면

  1. 완료될때까지의 날짜를 담을 변수 complete, 그 날짜들을 비교하여 answer에 담기전의 연산을 할때 임시로 필요한 day를 선언한다.
  2. progress가 0, speeds가 1일 경우 최대 100일이 소요되기 때문에 맥시멈을 100으로 잡고 중첩 반복문을 돌려서 100 <= progresses[i] + speeds[i]*j가 되는 시점을 찾는다.
  3. 그때의 j값을 complete에 담고 break를 걸어서 반복문을 빠져나온다.
  4. complete의 원소들을 비교하면서 뒤에 오는 원소가 더 작은 경우(즉, 배포 날짜가 앞의 작업과 같은 경우)에는 day를 +1 해주고
    4-1. 뒤에 오는 원소가 더 클 경우(배포날짜가 오늘이 아니고 미뤄지는 작업의 경우)에는 answer에 지금까지 day에 담아 놓았던 날짜를 넣어주고 day를 1로 바꿔준다.
  5. 4번의 경우가 마지막에 올경우 answer에 마지막 day가 안들어가기 때문에 icomplete의 사이즈-1과 같을때 answerday를 더해주는 조건문을 추가한다.

레고레고

테스트 케이스 1번,2번에 맞는 답을 도출하려고 수정을 굉장히 많이 했다. 그러다보니 억지로 1,2번 케이스에만 맞는 코드가 된 것이 아닐까 하는 걱정이 든다..

역시나 대참사 ㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋ 질문하기를 찾아보니 아마 연속으로 한번에 배포되는 수가 2이상이면 (ex. 96 97 98 99 / 1 1 1 1) return이 4여야 하는데 내 코드에서는 2,1,1이다. 그래서 else문을 수정하려했는데 dayanswer에 저장하고 1로 초기화해주는 부분?순서?가 계속 꼬인다. 그냥 카테고리대로 스택이나 큐로 코드를 갈아엎어야 할 듯 하다...

profile
레고레고

0개의 댓글