유블로그

[프로그래머스] 튜플 본문

알고리즘

[프로그래머스] 튜플

yujeong kang 2021. 1. 18. 21:15

[프로그래머스] level2 튜플

 

소요시간 : 23분

 

매개변수로 string이 주어져서 substring과 split을 이용해야만 했었다.

하지만 다 풀고 다른 사람 코드를 보니 replaceAll 을 이용하여 {, } 를 모두 없애고 , 로 split 했던데

그거나 이거나 비슷할 듯하다.

 

그 다음 split된 결과를 integer로 변환하여 배열을 list에 다 넣고 

list를 배열 길이순으로 정렬한다.

그래야 중복되지 않는 숫자를 찾을 수 있다.

 

정렬 후 정답 list에 숫자가 있는지 contains로 확인하고(set의 메소드를 사용해도 될 듯)

없으면 정답 list에 넣는다.

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

class Solution {
    public int[] solution(String s) {
    	s = s.substring(2, s.length()-2);
    	String[] strings = s.split("\\},\\{");
    	
    	List<int[]> list = new ArrayList<>();

    	for (int i = 0; i < strings.length; i++) {
			String[] ss = strings[i].split(",");
			int[] arr = new int[ss.length];
			for (int j = 0; j < ss.length; j++) {
				arr[j] = Integer.parseInt(ss[j]);
			}
			list.add(arr);
		}
    	
    	list.sort(new Comparator<int[]>() {
			@Override
			public int compare(int[] o1, int[] o2) {
				return o1.length-o2.length;
			}
		});
    	
    	List<Integer> answer = new ArrayList<>();
    	int idx = 0;
    	while(idx < list.size()) {
    		int[] arr = list.get(idx);
			for (int j = 0; j < arr.length; j++) {
				if(!answer.contains(arr[j])) {
					answer.add(arr[j]);
					break;
				}
			}
    		idx++;
    	}
        
    	int[] arr = new int[answer.size()];
    	for (int i = 0; i < answer.size(); i++) {
    		arr[i] = answer.get(i);
    	}
        return arr;
    }
}