Heap_더맵게

선풍기·2024년 1월 1일

프로그래머스

목록 보기
7/8

더 맵게

문제

풀이과정

가장먼저 우선순위 큐를 활용하여 정렬을 해주었고
while문의 조건을 만약 우선순위큐에 들어가있는게 1이 아니고 가장 작은것이 7보다 작다면 계속해서 돌아주게 구현하였다.
또한 이것을 계속돌아주면서
저 공식에 따라 계속해서 계산해주었다.
그렇게 나온 첫번째 코드
또한 마지맊까지 돌았는데도 size가 1이고 제일 작은 것이 7보다 작다면 -1을 리턴해주었다.

첫번째 코드

#include <string>
#include <vector>
#include <iostream>
#include <functional>
#include <queue>
using namespace std;

int solution(vector<int> scoville, int K) {
    int answer = 0;
    int tmp1, tmp2, tmp3;
    priority_queue<int, vector<int>, greater<int>> Myscovil;
    for (auto iter = scoville.begin(); iter != scoville.end();iter++) {
        Myscovil.push(*iter);
    }
    while (Myscovil.size() != 1 && Myscovil.top() < 7) {
        tmp1 = Myscovil.top();
        Myscovil.pop();
        tmp2 = Myscovil.top();
        Myscovil.pop();
        tmp3 = tmp1 + tmp2 * 2;
        Myscovil.push(tmp3);
        answer++;
    }
    if (Myscovil.size() == 1&&Myscovil.top()<7)
        answer = -1;
    return answer;
}

근데 답이 틀렸다고 나왔다...

다시 생각해보아야겠다...

맞게 짠거 같은데 왜자꾸 틀렸다고 나오는 지 잘 모르겠어서 계속해서 보니까 이유를 알았다.. 지금까지 매운 지수가 7로 고정인 줄 알았는데 K이상으로 맞추는 것이였다.

변수를 변경해서 다시 코드를 변경해보았다.

#include <string>
#include <vector>
#include <iostream>
#include <functional>
#include <queue>
using namespace std;
int solution(vector<int> scoville, int K) {
    int answer = 0;
    int tmp1, tmp2, tmp3;
    priority_queue<int, vector<int>, greater<int>> Myscovil;
    for (auto iter = scoville.begin(); iter != scoville.end();iter++) {
        Myscovil.push(*iter);
    }
    while (Myscovil.size() != 1 && Myscovil.top() < K) {
        tmp1 = Myscovil.top();
        Myscovil.pop();
        tmp2 = Myscovil.top();
        Myscovil.pop();
        tmp3 = tmp1 + tmp2 * 2;
        Myscovil.push(tmp3);
        answer++;
    }
    if (Myscovil.top()<K)
        answer = -1;
    return answer;
}

그랫더니 바로 정답이 나왔다. 이런 사소한 거에서 실수를 안하도록 해야겠다.

0개의 댓글