Skip to main content

[level 2] 튜플 - 64065

Intro

문제 링크

문제 설명

셀수있는 수량의 순서있는 열거 또는 어떤 순서를 따르는 요소들의 모음을 튜플(tuple)이라고 합니다. $n$개의 요소를 가진 튜플을 $n$-튜플이라고 하며, 중복되는 원소가 없는 튜플이 주어질 때 이는 집합 기호 {, }를 이용해 표현할 수 있습니다.

예를 들어 튜플이 (2, 1, 3, 4)인 경우 이는 다음과 같이 표현될 수 있습니다.

  • {{2}, {2, 1}, {2, 1, 3}, {2, 1, 3, 4}}

집합은 원소의 순서가 바뀌어도 상관없으므로 여러 방식으로 표현될 수 있습니다. 특정 튜플을 표현하는 집합이 담긴 문자열 $s$가 매개변수로 주어질 때, $s$가 표현하는 튜플을 배열에 담아 return 하도록 solution 함수를 완성해주세요.

제한사항

  • $s$의 길이는 5 이상 1,000,000 이하입니다.
  • $s$는 숫자와 {, }, , 로만 이루어져 있습니다.
  • $s$는 항상 중복되는 원소가 없는 튜플을 올바르게 표현하고 있습니다.
  • return 하는 배열의 길이가 1 이상 500 이하인 경우만 입력으로 주어집니다.

입출력 예시

sresult
{{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]
{{20,111},{111}}[111, 20]

구현 코드

import java.util.ArrayList;
import java.util.Comparator;
import java.util.Arrays;

class Solution {

public ArrayList<Integer> solution(String s) {

// 1. 튜플을 만들 ArrayList 객체.
ArrayList<Integer> answer = new ArrayList<>();
// 2. 가장 앞의 {{ 를 제거한다.
s = s.substring(2,s.length());
// 3. 가장 뒤의 }} 를 제거한 뒤, },{ 형태의 문자열을 -로 바꾼다.
s = s.substring(0,s.length()-2).replace("},{","-");
// 4. 위에서 바꾼 문자열을 기준으로 split 해준다.
String str[] = s.split("-");
// 5. 나눠진 문자열 배열을 길이에 따라 다시 정렬한다.
Arrays.sort(str,new Comparator<String>(){
public int compare(String o1, String o2){

return Integer.compare(o1.length(), o2.length());
}
});

// 6. 각 문자열을 탐색한다.
for(String x : str){
// 7. 한 문자열마다 ,를 기준으로 split하여 새로운 문자열 배열을 만든다.
String[] temp = x.split(",");
// 8. 새로만든 문자열 배열에는 정수값만 존재하며 이를 탐색한다.
for(int i = 0 ; i < temp.length;i++){
// 9. 각 문자열 값을 정수로 바꾼다.
int n = Integer.parseInt(temp[i]);
// 10. 튜플에 들어있는 값이 아니라면 추가해준다.
if(!answer.contains(n))
answer.add(n);
}
}

return answer;
}
}
성능 요약
메모리: 97.4 MB, 시간: 87.23 ms

채점결과
정확성: 100.0


효율성: 0.0


합계: 100.0 / 100.0