새소식

코딩테스트/프로그래머스

[C++] 튜플

  • -

[문제]

코딩테스트 연습 - 튜플 | 프로그래머스 스쿨 (programmers.co.kr)

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

[문제 풀이]

vector<int> total[n]과 split 함수만 있다면 쉽게 구현이 가능한 문제이다.

vector<int> total[n]에서 n은 해당 벡터의 사이즈 크기로 {2}는 사이즈가 1이니 vector<int> total[1]에 저장시키고 {2,3}은 vector<int> total[2]에 저장시키자.

즉, split 함수를 이용해서 int 벡터에 {} 안에 있는 숫자들을 모두 저장시키고 해당 벡터를 total에 저장만 시키면 생각보다 금방 끝난다.

자세한 사항은 코드 참고.

[회고]

구현문제로 만드는데 어렵게 접근을 해서 도중에 시간 낭비가 30분 넘게 생겼었다.

find에서 찾을때 answer안에만 없으면 되는데 도중에 total안에 없어야 되지 않냐고 착각을 해서 시간 낭비를 또 30분 했었다....

난이도 자체가 어렵진 않으니 언제나 주의만 하면 쉽게 풀 수 있다.

[코드]

#include <string>
#include <vector>
#include <set>
#include <algorithm>
#include <iostream>
#include <sstream>
using namespace std;

vector<int> total[100001];
string str;
int max_point;

void split(string s){
    string buffer;
    vector<int> answer;
    istringstream iss(s);
    char delimeter = ',';
    int result = 0;
    while(getline(iss,buffer,delimeter)){
        answer.push_back(stoi(buffer));
        result++;
    }
    total[result] = answer;
    max_point = max(max_point,result);
    return;
}

vector<int> solution(string s) {
    vector<int> answer;    
    int startPoint;
    for(int i = 1;i<s.size() - 1;i++){
        if(s[i] == '{'){
            startPoint = i;
        }
        else if(s[i] == ','){
        }
        else if(s[i] == '}'){
            // str = substr()으로 시작인덱스 ,끝 인덱스 파악.
            //split으로 나누자.
            string temp;
            temp = s.substr(startPoint + 1,i - startPoint - 1);
            split(temp);
        }
    }
    
    //1. vector<int > total[] 에서 뒤의[i] 에서 i는 크기를 의미.
    //2. answer안에 아직 저장된적이 없다면 넣자.
    vector<int>::iterator it;
    
    for(int i = 1;i<=max_point;i++){
        for(int j = 0;j<total[i].size();j++){
            it = find(answer.begin(),answer.end(),total[i][j]);
            if(it == answer.end()){
                answer.push_back(total[i][j]);
            }
        }
    }
    
    
    
    return answer;
}

'코딩테스트 > 프로그래머스' 카테고리의 다른 글

[C++] 스킬트리  (0) 2023.04.13
[C++] 땅따먹기  (0) 2023.04.13
[C++] 미로 탈출  (0) 2023.04.05
[C++] 과제 진행하기  (0) 2023.04.05
[C++] 멀리 뛰기  (0) 2023.04.04
Contents

포스팅 주소를 복사했습니다

이 글이 도움이 되었다면 공감 부탁드립니다.