개발/알고리즘

[프로그래머스] 최댓값과 최솟값

ash_ 2023. 9. 25. 22:08

[level2] 최댓값과 최솟값

 

문제 링크

문제 설명

문자열 s에는 공백으로 구분된 숫자들이 저장되어 있습니다. str에 나타나는 숫자 중 최소값과 최대값을 찾아 이를 "(최소값) (최대값)"형태의 문자열을 반환하는 함수, solution을 완성하세요.
예를들어 s가 "1 2 3 4"라면 "1 4"를 리턴하고, "-1 -2 -3 -4"라면 "-4 -1"을 리턴하면 됩니다.

제한 조건

  • s에는 둘 이상의 정수가 공백으로 구분되어 있습니다.

제출 코드

#include <string>
#include <vector>
#include <queue>
#include <iostream>

using namespace std;

string solution(string s) {
    string answer = "";
    priority_queue<int> q;
    string str = "";
    
    for (int i = 0; i < s.length(); i++) {
        if (s[i] == ' ') {
            q.push(stoi(str));
            i++;
            str = "";
        }
        str += s[i];
    }
    q.push(stoi(str));
    int max = q.top();
    while (q.size() != 1)
        q.pop();
    int min = q.top();
    answer = to_string(min) + " " + to_string(max);
    return answer;
}

string으로 받은 입력을 공백으로 나누고 int로 바꿔서 priority_queue에 넣어주고, max랑 min을 string에 추가해줬다.

최근에 백준을 많이 풀었어서, 단순히 int로 받고 printf로 출력하면 되는 문젠데 이게 왜 level2인지 의문을 가졌다가 string으로 입력이 들어온다는걸 깨달아버렸다.

 

물론 단순히 stoi를 써서 어려운 건 아니었지만... 뭔가 내 코드가 깔끔하지 않은 것 같다.

 

그리고 나는 priority_queue를 썼는데, 그냥 vector의 정렬을 써서 쓰는 사람들이 많았다. 오히려 그게 나을지도...? 나는 마지막 숫자 구하려고 queue를 전부 pop 해줘야 했기 때문에...

 

아무튼, 어려운 문제는 아니었지만 뭔가 코드가 깔끔해보이지 않아서 마음에 들진 않는다.

'개발 > 알고리즘' 카테고리의 다른 글

[백준]1193_분수찾기 C++  (0) 2023.09.28
[백준] 연결 요소의 개수 - C++  (0) 2023.09.27
[프로그래머스]멀리 뛰기  (0) 2023.09.25
[백준]2792 - 보석상자  (0) 2023.08.07
[프로그래머스] 전화번호 목록(C++)  (0) 2023.03.28