홍시홍의 프로그래밍

[프로그래머스] 튜플 (C++) 본문

알고리즘 문제풀이/프로그래머스

[프로그래머스] 튜플 (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;
}
Comments