심심한잉여의 잡동사니

JAVA - 프로그래머스 2레벨 - 튜플 본문

코딩일기/코딩테스트 연습

JAVA - 프로그래머스 2레벨 - 튜플

심심한잉여 2021. 10. 20. 22:29
반응형

import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
import java.util.LinkedHashSet;
import java.util.List;
import java.util.Map;
import java.util.Set;

class Solution {
    public int[] solution(String s) {
     int[] answer = {};

		String str1 = s.substring(2, (s.length() - 2)); // 각 앞, 뒤에 있는 중괄호 삭제
		List<String[]> list = new ArrayList<String[]>();

		String[] strA1 = str1.split("\\},\\{"); // String으로 받은 배열값 배열로 정리
		
		Map<Integer, String[]> map = new HashMap<Integer, String[]>();
		
		for(int i = 0; i<strA1.length;i++) {
			list.add(strA1[i].split(",")); // 정리된 배열값들을 다시 각각의 2차원 배열로 정리
		}
				
		for(int i = 0;i<list.size();i++) { // 2차원 배열로 정리된 배열을 length를 키워드로 정렬
			map.put(list.get(i).length, list.get(i));
		}

		Set<String> set = new LinkedHashSet<String>(); // 순서가 섞이지 않도록 링크셋 사용
		for(int i = 1;i<=map.size();i++) {
			for(int j = 0;j<map.get(i).length;j++) {
				set.add(map.get(i)[j]); // 배열길이로 정렬한 순서대로 배열값을 set에 정리
                						// set은 중복된 값은 저장되지 않음
			}
		}
		answer = new int[set.size()];
		Iterator<String> it = set.iterator(); // set순회방법
		int i = 0;
		while (it.hasNext()) { // set 순회방법 2
			answer[i] = Integer.parseInt(it.next()); // 순회하며 answer에 값 지정
			i++;

		}

		return answer;
    }
}

하면서 내부클래스를 이용한 sort방법은 배웠으나 map으로 하는것이 더 성능이 잘 나올것같아 바꿧다.

반응형