1. 문제 설명
2. 문제 해결
배열의 길이가 길지 않은 걸 보니 따로 최적화를 할 필요는 없는 구현 문제라고 판단된다. 그냥 문제에서 하라는 대로 차근차근 하면 되어서 어려운 문제는 아니다. 나의 경우 v에 걸리는 시간을 넣어두고, map 자료구조를 사용해서 값을 갱신하는 형태로 코드를 작성하였다. 내 코드도 나쁘지 않다고 생각했는데, 다른 사람들의 풀이를 보니 훨씬 잘 최적화한 경우가 있었다.
내가 놓친 부분은 다음과 같다.
1. 작업일수를 구하기 위해 내부 반복문을 작성하지 않아도 된다. 99에서 현재 작업량을 빼고 속도로 나눠주면 된다.
2. 이 문제에서는 v를 선언해서 계속해서 값을 저장해둘 필요는 없다. int 변수에 지금까지 중 최대 작업량만 넣어두면 된다.
3. 꼭 map 자료구조를 사용할 필요는 없다. 왜냐하면 개수를 갱신한다고 하더라도 이전 값만 갱신하게 되기 때문이다.
++answer.back();
3. 코드
#include <string>
#include <vector>
#include <map>
using namespace std;
vector<int> solution(vector<int> progresses, vector<int> speeds) {
vector<int> answer;
map <int, int> m;
vector <int> v;
for (int i = 0; i < progresses.size(); i++)
{
int num = 1;
int tmp = progresses[i];
while ((tmp += speeds[i]) < 100)
num++;
if ((i != 0) && (v[i - 1] > num))
num = v[i - 1];
m[num]++;
v.push_back(num);
}
for (auto p:m)
answer.push_back(p.second);
return answer;
}
'알고리즘' 카테고리의 다른 글
프로그래머스 H-index (C++) (0) | 2024.07.17 |
---|---|
프로그래머스 의상 (C++) (0) | 2024.07.16 |
프로그래머스 구명보트 (C++) (0) | 2024.07.16 |
프로그래머스 전화번호목록 (C++) (0) | 2024.07.15 |
프로그래머스 조이스틱 (C++) (1) | 2024.07.15 |