-
프로그래머스) 최댓값과 최솟값 c++ 풀이알고리즘과 언어/문제풀이 2022. 1. 4. 17:38
문제
https://programmers.co.kr/learn/courses/30/lessons/12939
문자열로 주어진 숫자들 중에서 가장 작은 값과 가장 큰 값을 문자열로 묶어 반환하는 문제다.
내 풀이
문자열을 순차적으로 숫자로 반환한다.
순차적으로 탐색하며 MIN 값과 MAX값을 경신하는 방법으로 풀었다.
내 로직
1. 임의의 최솟값 (-99999999) 최댓값 (99999999)을 설정한다.
2. 문자열을 탐색한다.
3 - 1. 공백이라면, 음수 check 값을 초기화한다.
앞까지의 연속된 문자로 얻어진 '숫자'를 토대로 최댓값과 최솟값을 갱신한다.
3 - 2. '-' 라면
'-'가 나온다면 음수 check
3 - 2. 공백도 아니고 '-'도 아니라면
앞선 값에 10을 곱하고, 1의 자리 수에 값을 추가한다. (음수라면 뺌으로써, 양수라면 더함으로써 추가한다.)
4. 마지막 숫자 뒤에는 ' '이 없기 때문에, 마지막에도 최댓값, 최솟값 갱신을 진행한다.
내 코드
#include <string> #include <vector> #include <iostream> using namespace std; string solution(string s) { string answer = ""; bool MINUS = false; int MAX = -99999999; int MIN = 99999999; int num = 0; for(int i = 0; i < s.size(); i++) { if(s[i] == ' ') { MINUS = false; if (num < MIN) MIN = num; if (num > MAX) MAX = num; num = 0; continue; } else if (s[i] == '-') { MINUS = true; continue; } else { num *= 10; if(MINUS) num -= (s[i] - '0'); else num += (s[i] - '0'); } } if (num < MIN) MIN = num; if (num > MAX) MAX = num; answer += to_string(MIN); answer.push_back(' '); answer += to_string(MAX); return answer; }
알게된 점
문자열은 대부분 python으로 풀어왔기 때문에, to_string 함수에 대해 알게 되었다.
다른 사람의 c++ 풀이에도 to_string은 쓰였다.
https://www.cplusplus.com/reference/string/to_string/
모든 type의 숫자를 문자열로 바꾸어 string type으로 반환해준다.
다른 사람의 풀이
1. 문자열에서 숫자를 추출하여
2. 벡터에 넣은 후에
3. sort()를 통해 맨 앞과 맨 뒤의 숫자를 묶어 반환했다.
** 이 풀이의 경우 임의의 최솟값과 최댓값을 설정할 필요가 없기에 안전하다고 생각했지만 (최솟값, 최댓값을 int의 끝 범위로 설정해야 한다고 생각했지만 그렇게 구현하지 못했다.)
sort를 진행하는 것이 순차 탐색보다 시간 복잡도가 좋지 않다고 생각된다.
'알고리즘과 언어 > 문제풀이' 카테고리의 다른 글
C++ ) 백준 1743 (0) 2022.03.23 백준 16956 늑대와 양 c++ dfs, bfs (0) 2022.01.20 프로그래머스) N개의 최소공배수 c++ 풀이 (0) 2022.01.12 프로그래머스) 다음 큰 숫자 (0) 2021.12.29 프로그래머스) 올바른 괄호 c++ 풀이 (0) 2021.12.29