HelloMinchan
처음처럼
HelloMinchan
LinkedIn
전체 방문자
오늘
어제
  • 분류 전체보기 (306)
    • Backend (4)
      • NestJS (1)
      • Express (1)
      • Spring (2)
    • Infrastructure (1)
      • AWS (1)
    • Frontend (1)
      • Next.js (1)
    • Language & Runtime (4)
      • Java (2)
      • Node.js (2)
    • Computer Science (8)
      • Computer Networks (3)
      • Operating Systems (4)
      • OOP (1)
    • 독서 (4)
      • 데이터 중심 애플리케이션 설계 (3)
      • 객체지향의 사실과 오해 (1)
    • 회고 (4)
      • Project (2)
      • Career (2)
    • Deprecated (280)

채널

  • GitHub
  • LinkedIn

최근 글

태그

  • 개발자
  • 프로그래머스
  • 프로그래밍
  • 프로그래머스Python
  • Algospot
  • 백준Python
  • 백준
  • Database
  • 백준Go
  • 백엔드
  • programmers
  • 코딩
  • Baekjoon Online Judge
  • 프로그래머스C++
  • 데이터베이스
  • front-end
  • 알고스팟
  • back-end
  • 알고스팟Python
  • 백준C++

최근 댓글

인기 글

hELLO
HelloMinchan

처음처럼

[programmers] 프로그래머스 튜플(C++, Python)
Deprecated

[programmers] 프로그래머스 튜플(C++, Python)

2020. 5. 9. 01:13

(주)그렙

[programmers] 프로그래머스 튜플

(C++, Python)

(글쓴날 : 2020.05.09)

 


* programmers, 프로그래머스 문제 C++, Python 언어 풀이입니다.

* 소스 코드의 저작권은 글쓴이에게 있습니다.


 

 

프로그래머스 튜플


1) 문제

문제 링크 : https://programmers.co.kr/learn/courses/30/lessons/64065

 

프로그래머스

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

programmers.co.kr


2) 풀이 과정

* 시간 복잡도 : O(n)

 

특정 튜플을 표현하는 집합이 담긴 문자열이 주어질 때, 문자열이 표현하는 튜플을 구하는 문제입니다.

 

저의 경우, C++와 Python을 사용했습니다.

문자열을 차례대로 탐색하여 만약, 숫자일 시 큐에 저장하고, ,(쉼표) 혹은 }(닫는 중괄호)일 시 저장되어 있던 모든 숫자를 큐에서 빼어 나온 순서대로 합친 뒤, 문자열에서 표현하던 숫자로 변환하였습니다.

그 후, 문제의 조건에서 가능한 범위의 숫자와 해당 숫자의 개수를 저장하는 배열을 만들어 위에서 변환한 숫자들을 대입한 뒤, 숫자의 개수를 기준으로 내림차순 정렬하였고, 숫자의 개수가 0인 원소를 제외한 정렬된 순서대로 answer 배열에 저장하여 문제를 해결했습니다.


3) 코드

 

* C++ 코드

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
#include <iostream>
#include <string>
#include <vector>
#include <queue>
#include <utility>
#include <algorithm>
#include <cstring>
 
using namespace std;
 
vector<int> solution(string s)
{
    struct cmp
    {
        bool operator()(pair<int, int> oldValue, pair<int, int> newValue)
        {
            return oldValue.second > newValue.second;
        }
    };
    vector<int> answer;
    vector<int> temp;
    int sLength = s.size();
    queue<char> q;
    string tempNum = "";
    bool isPop = false;
    string value = "";
    vector<pair<int, int>> hash;
 
    for (int i = 0; i < sLength; i++)
    {
        tempNum = "";
 
        if (s[i] != '{' && s[i] != '}')
            q.push(s[i]);
 
        if (s[i] == '}')
        {
            isPop = false;
 
            while (q.size())
            {
                isPop = true;
                value = q.front();
                q.pop();
 
                if (value != ",")
                    tempNum += value;
                else
                {
                    if (tempNum != "")
                    {
                        temp.push_back(stoi(tempNum));
                        tempNum = "";
                    }
                }
            }
 
            if (isPop && tempNum != "")
                temp.push_back(stoi(tempNum));
        }
    }
 
    for (int i = 0; i < 100001; i++)
        hash.push_back({i, 0});
 
    for (int i = 0; i < temp.size(); i++)
        hash[temp[i]].second++;
 
    sort(hash.begin(), hash.end(), cmp());
 
    for (int i = 0; i < 100001; i++)
    {
        if (!hash[i].second)
            break;
        answer.push_back(hash[i].first);
    }
 
    return answer;
}

* Python 코드

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
from collections import deque
 
 
def solution(s):
    answer = []
    sLength = len(s)
    dq = deque()
    
    for i in range(sLength):
        tempNum = ""
 
        if s[i] != "{" and s[i] != "}":
            dq.append(s[i])
 
        if s[i] == "}":
            isPop = False
 
            while(len(dq)):
                isPop = True
                value = dq.popleft()
                
                if value != ",":
                    tempNum += value
                else:
                    if tempNum != "":
                        answer.append(tempNum)
                        tempNum = ""
 
            if isPop and tempNum != "":
                answer.append(tempNum)
 
    hash = []
    for i in range(100001):
        hash.append([i, 0])
    
    for num in list(map(int, answer)):
        hash[num][1] += 1
        
    temp = sorted(hash, reverse=True, key=lambda x : x[1])
    
    answer = []
    for num in temp:
        if num[1] == 0:
            break
        answer.append(num[0])
        
    return answer

 

저작자표시 비영리 변경금지 (새창열림)

'Deprecated' 카테고리의 다른 글

[ALGOSPOT] 알고스팟 PICNIC 소풍(Python)  (0) 2020.05.12
[programmers] 프로그래머스 불량 사용자(Python)  (0) 2020.05.10
[programmers] 프로그래머스 크레인 인형뽑기 게임(C++, Python)  (0) 2020.05.08
[ALGOSPOT] 알고스팟 FESTIVAL 록 페스티벌(C++, Python)  (0) 2020.05.06
[ALGOSPOT] 알고스팟 LIS Longest Increasing Sequence(C++, Python)  (0) 2020.05.03
    'Deprecated' 카테고리의 다른 글
    • [ALGOSPOT] 알고스팟 PICNIC 소풍(Python)
    • [programmers] 프로그래머스 불량 사용자(Python)
    • [programmers] 프로그래머스 크레인 인형뽑기 게임(C++, Python)
    • [ALGOSPOT] 알고스팟 FESTIVAL 록 페스티벌(C++, Python)
    HelloMinchan
    HelloMinchan
    Though you should not fear failure, You should do your very best to avoid it.

    티스토리툴바