[프로그래머스 C++] 기능개발
[프로그래머스 C++] 기능개발
https://school.programmers.co.kr/learn/courses/30/lessons/42586
해결전략
스택 Stack
나눗셈 올림
x와 y가 양의 정수, x / y의 결과값을 올림하기 위한 코드
int ceilResult = x / y + ( x % y !=0 );
올림 함수 : ceil()
내림 함수 : floor()
- 올림 함수와 내림 함수는 소수형인 double, float형 일 때는 효과적이나 주어진 값이 정수이면 위의 코드 방식이 더 수월하다.
코드
#include <vector>
#include <stack>
using namespace std;
vector<int> solution(vector<int> progresses, vector<int> speeds) {
vector<int> answer;
stack<int> myStack; //시간값을 넣는 stack
for(int i= progresses.size()-1; i>=0; i--)
{
int x = (100-progresses[i]) / speeds[i] + ((100-progresses[i]) % speeds[i] != 0);
myStack.push(x);
}
while(!myStack.empty())
{
int prev = myStack.top();
myStack.pop();
int cnt = 1;
if(!myStack.empty())
{
while (prev >= myStack.top())
{
myStack.pop();
cnt++;
//stack이 완전히 비어버리면 while 조건문에서 터져버리니 break로 빠져나가게 만들어준다.
if (myStack.empty()) break;
}
}
answer.push_back(cnt);
}
return answer;
}
x와 y가 양의 정수, x / y의 결과값을 올림하기 위한 코드
int ceilResult = x / y + ( x % y !=0 );
for(int i= progresses.size()-1; i>=0; i--){
int x = (100-progresses[i]) / speeds[i] + ((100-progresses[i]) % speeds[i] != 0);
myStack.push(x);
}
- 반복문에서는 각 작업에 대해 남은 작업량(100 - 현재 진행률)을 작업 속도로 나눈 값(=완료까지 필요한 시간)을 계산
- 만약 남은 작업량이 속도로 딱 나눠떨어지지 않으면 하루가 추가로 필요하므로, (100-progresses[i]) % speeds[i] != 0 조건식으로 확인하여 하루를 추가.
- 그렇게 구한 시간 값을 스택에 넣는다.
'⭐ 코딩테스트 > 프로그래머스' 카테고리의 다른 글
[프로그래머스 C++] 타겟 넘버 (0) | 2023.09.25 |
---|---|
[프로그래머스 C++] 프로세스 (0) | 2023.09.23 |
[프로그래머스 C++] [1차] 뉴스 클러스터링 (0) | 2023.09.21 |
[프로그래머스 C++] 튜플 (0) | 2023.09.19 |
[프로그래머스 C++] 피로도 (0) | 2023.09.15 |
댓글
이 글 공유하기
다른 글
-
[프로그래머스 C++] 타겟 넘버
[프로그래머스 C++] 타겟 넘버
2023.09.25 -
[프로그래머스 C++] 프로세스
[프로그래머스 C++] 프로세스
2023.09.23 -
[프로그래머스 C++] [1차] 뉴스 클러스터링
[프로그래머스 C++] [1차] 뉴스 클러스터링
2023.09.21 -
[프로그래머스 C++] 튜플
[프로그래머스 C++] 튜플
2023.09.19