본문 바로가기
알고리즘/프로그래머스

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

by Bloofer 2021. 2. 21.

A. 문제설명

문제에 대한 자세한 설명은 링크 참조

programmers.co.kr/learn/courses/30/lessons/64065

 

코딩테스트 연습 - 튜플

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

programmers.co.kr

 

1. 열거형의 특정 순서를 따르는 요소들의 모음을 튜플이라고 한다.

2. n개의 요소들을 가진 튜플을 n-튜플이라고 할 때, 아래와 같은 성질을 가진다.

중복된 원소가 있을 수 있습니다. ex : (2, 3, 1, 2)
원소에 정해진 순서가 있으며, 원소의 순서가 다르면 서로 다른 튜플입니다. ex : (1, 2, 3) ≠ (1, 3, 2)
튜플의 원소 개수는 유한합니다.

3. 원소가 n개이고 중복이 없는 튜플이 주어질 때, 집합기호로 아래와 같이 표현한다.

{{a1}, {a1, a2}, {a1, a2, a3}, {a1, a2, a3, a4}, ... {a1, a2, a3, a4, ..., an}}

4. 이는 {a1, a2, a3, a4, ..., an}을 나타낸다고 할 때, 특정 튜플을 표현하는 문자열의 집합을 받아, 표현하는 해당 튜플을 반환하라.

 

B. 접근법

정렬

 

본 문제에서 튜플의 표현형이 스트링 형태의 입력으로 주어져서 전처리하는 것이 귀찮지만, 문제 자체의 난이도가 크게 어려운 편은 아니었다. 스트링 구조의 입력을 집합의 집합으로 자료구조를 옮기고(내 경우 nested vector로 표현하였다.) 그 안에서 내부 집합들의 크기에 따라 정렬을 해준 후, 제일 작은 집합의 원소부터 튜플에 삽입하는 식으로 반복문을 수행한다.

여기서, check[] 벡터를 사용하여 튜플에 이미 삽입된 원소는 배제할 수 있도록 조건문을 하나 추가한다.

 

C. 풀이

1. 스트링으로 주어진 형태의 입력을 대괄호를 기준으로 나눔

2. 대괄호 내에서 나누어진 튜플들의 원소를 정수형으로 쪼개어 중첩벡터에 삽입

3. 중첩벡터 내 벡터, 각 튜플의 원소의 크기에 따라 정렬

4. 그 안에서 제일 작은 집합의 원소부터 튜플에 삽입

 

D. 내 코드