프로그래머스 튜플 문제 링크 

 

리뷰 

입력이 문자열로 주어지는데, 괄호와 콤마가 섞인 숫자가 있는 문자열이다. 

"{{2},{2,1},{2,1,3},{2,1,3,4}}"

문자열 내에 숫자 그룹이 4개다. 이걸 4개의 그룹으로 구분해야 한다고 생각해서 2차원 벡터를 선언했다. 

 

그런데 풀다보니 map으로 각 숫자의 개수를 센다. -> 2 4개, 1 3개, 3 2개, 4 1개 

개수가 많은 숫자부터 출력하면 답이 된다. 

 

sort() 함수에 비교함수 cmp 를 넣어서 pair.second 개수를 기준으로 내림차순 정렬을 했다. 

따로 2차원 벡터로 구분할 필요가 없어서 두 번째 코드는 int 배열에 모든 숫자를 넣고 map으로 숫자의 개수를 셌다. 

 

"맞았습니다" 코드 1 

#include <string>
#include <vector>
#include <map>
#include <algorithm>
using namespace std;

bool cmp(pair<int,int> &a, pair<int,int> &b){
  return a.second > b.second;
}
vector<int> solution(string s) {
  vector<int> answer;
  map<int,int> tuple_map; // {숫자, 숫자의 개수}
  int slen = s.size();

  // 2차원 벡터 선언 
  vector<vector<int>> v(500, vector<int>());
  int v_num = 0; // {그룹 번호 == 벡터의 행 번호 }
  
  string s_num;

  for(int i = 1; i < slen-1; i++){
    
    if(isdigit(s[i])) s_num += s[i]; // 숫자라면, s_num 문자열에 이어붙인다.

    else if(!s_num.empty()){ // 숫자가 아닌게 나오면 벡터에 푸시하고 문자열 초기화
      v[v_num].push_back(stoi(s_num));
      s_num = "";
      
      if(s[i] == '}') v_num++; // 닫는 괄호 }가 나오면, 그룹 하나가 끝난거니까 벡터의 행을 증가시킴
    }
  }

  for(int i = 0; i < v_num; i++){ // 숫자 마다의 개수를 센다 
    for(int j = 0; j < v[i].size(); j++){
      tuple_map[v[i][j]]++;
    }
  }

  vector<pair<int,int>> pv(tuple_map.begin(), tuple_map.end());
  sort(pv.begin(), pv.end(), cmp); // '개수'기준으로 내림차순 정렬 

  for(int i = 0; i < pv.size(); i++) answer.push_back(pv[i].first);
  return answer;
}

 

 

"맞았습니다" 코드 2 

#include <string>
#include <vector>
#include <map>
#include <algorithm>
using namespace std;

bool cmp(pair<int,int> &a, pair<int,int> &b){
  return a.second > b.second;
}
vector<int> solution(string s) {
  vector<int> answer;
  string s_num;

  for(char ch : s){

    if(isdigit(ch)) s_num += ch; // 숫자라면, s_num 문자열에 이어붙인다.

    else if(!s_num.empty()){ // 숫자가 아닌게 나오면 벡터에 푸시하고 문자열 초기화
      answer.push_back(stoi(s_num));
      s_num = "";
    }
  }
  map<int,int> tuple_map;
  for(int i = 0; i < answer.size(); i++){
    tuple_map[answer[i]]++;
  }
  answer.clear();

  vector<pair<int,int>> pv(tuple_map.begin(), tuple_map.end());
  sort(pv.begin(), pv.end(), cmp);
  for(int i = 0; i < pv.size(); i++) answer.push_back(pv[i].first);

  return answer;
}

 

728x90

+ Recent posts