[level 2] 튜플 - 64065
문제 설명
셀수있는 수량의 순서있는 열거 또는 어떤 순서를 따르는 요소들의 모음을 튜플(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 이하인 경우만 입력으로 주어집니다.
입출력 예시
| s | result |
|---|---|
{{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