알고리즘 문제풀이/프로그래머스
[프로그래머스] 튜플 (C++)
홍시홍
2020. 5. 4. 17:48
분류
구현
요구사항
문자열 순서 구하기
풀이
1. 주어진 string 에서 숫자만 골라준다
2. '{'과 '}' 사이에 있는 숫자의 개수에 따라 v[숫자 개수]에 담아준다
위에 2가지 과정을 마치면 문제를 풀기위한 준비과정이 끝나는 것이다
나머지 과정은
v[1]에는 첫번째 숫자가 있다
v[2]에는 첫번째 숫자와 두번째 숫자가 있다(순서 모름)
순서는 모르지만 v[1]부터 탐색하여 1번째 자리 숫자는 아는 상황이다
그러므로 v[2]를 전체 탐색하여서 v[1]에는 없는 숫자가 나오면 2번째 자리인 것인다
3도 마찬가지로 처리한다
구현 문제는 탄탄한 로직을 구상하고, 풀면 구현은 정말 쉽게 되는 경우가 많다.
하지만 로직 구상하기가 힘들죠.....
#include <string>
#include <vector>
#include <algorithm>
#include <iostream>
#include <math.h>
using namespace std;
int arr[550];
vector<int> solution(string s) {
vector<int> answer;
vector<int > v[550];
int maxsize = 0;
for (int i = 1; i < s.size() - 1; i++) {
if (s[i] == '{') {
vector<int> temp;
int cnt = 0;
string strtemp;
int startj = i + 1;
int count = 0;
for (int j = i + 1; j < s.size(); j++) {
if (s[j] == ',') {
strtemp = s.substr(startj, cnt);
startj = j + 1;
cnt = 0;
temp.push_back(stoi(strtemp));
strtemp.clear();
count++;
continue;
}
if (s[j] == '}') {
strtemp = s.substr(startj, cnt);
startj = j + 1;
cnt = 0;
temp.push_back(stoi(strtemp));
strtemp.clear();
count++;
break;
}
cnt++;
}
for (int j = 0; j < temp.size(); j++) {
v[count].push_back(temp[j]);
}
int nowsize = temp.size();
maxsize = max(maxsize, nowsize);
}
}
for (int i = 1; i <= maxsize; i++) {
for (int j = 0; j < v[i].size(); j++) {
//이번 원소를 찾는다
int now = v[i][j];
int flag = 0;
for (int k = 1; k <= maxsize; k++) {
if (arr[k] == now) {
flag = 1;
break;
}
}
if (flag == 0) {
arr[i] = now;
}
}
}
for (int i = 1; i <= maxsize; i++) {
answer.push_back(arr[i]);
}
return answer;
}