*문제 출처는 프로그래머스에 있습니다.
문제 제목: 기능개발 (2단계)
문제 사이트: https://school.programmers.co.kr/learn/courses/30/lessons/42586
문제 설명
나의 풀이
#include <string>
#include <vector>
#include <queue>
using namespace std;
vector<int> solution(vector<int> progresses, vector<int> speeds) {
vector<int> answer;
int count = 0;
queue<int> pro_copy;
for (int i = 0; i < speeds.size(); i++) {
pro_copy.push(i);
}
while (!pro_copy.empty()) {
count = 0;
for (int i = 0; i < speeds.size(); i++) {
if (progresses[i] >= 100) continue;
progresses[i] += speeds[i];
}
while (!pro_copy.empty() && progresses[pro_copy.front()] >= 100) {
count++;
pro_copy.pop();
}
if (count != 0) answer.push_back(count);
}
return answer;
}
문제에서 앞에서부터 검사하여 자료를 넣는 방식으로 풀어야해서 스택 대신에 큐를 사용해서 풀었다.
※ 알아야 할 것
조건문을 사용할 때 조심해야할 점이 있다.
(1)
int main() {
queue<int> q;
q.push(100);
q.push(110);
q.push(100);
// 차이점
while (q.front() >= 100 && !q.empty()) {
cout << q.front() << endl;
q.pop();
}
return 0;
}
(2)
int main() {
queue<int> q;
q.push(100);
q.push(110);
q.push(100);
// 차이점
while (!q.empty() && q.front() >= 100) {
cout << q.front() << endl;
q.pop();
}
return 0;
}
위 두 코드는 비슷하지만 하나는 오류를 출력하고 하나는 정상적으로 작동한다.
(2) 코드 같은 경우에 (!q.empty() && q.front() >= 100)에서 !q.empty() 먼저 판별하므로 q.front() >= 100코드는 실행하지 않고 통과가 된다. 하지만 (1) 코드에선 (q.front() >= 100 && !q.empty()) q.front() >= 100이 코드가 !q.empty()이 코드보다 먼저 실행된다. 그러면 q에는 원소가 하나도 없지만 front()를 출력하게 되면서 오류가 뜬다.
조건문의 순서 실수로 인하여 코드가 제대로 돌아가지 않을 때도 있다는 사실을 알게 되었다.
'코딩테스트(프로그래머스 & 백준) > 프로그래머스-C++' 카테고리의 다른 글
Programmers / 전화번호 목록 / C++ (0) | 2024.03.05 |
---|---|
Programmers / 바탕화면 정리 / C++ (0) | 2024.03.05 |
Programmers / 안전지대 / C++ (0) | 2024.02.28 |
Programmers / 의상 / C++ (0) | 2024.02.27 |
Programmers / 프로세스 / C++ (0) | 2024.02.27 |