반응형

문제

https://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

 

 

코드 및 해설(주석)

import java.util.ArrayList;
import java.util.Comparator;
import java.util.HashSet;

class Solution {

    public int[] solution(String s) {
        ArrayList<String> list = new ArrayList<>();

        //내가 원하는 형태로 바꿈
        //같은집합 사이는 , 로 구분
        //다른 집합은 / 로 구분
        //마지막에 / 추가
        s = s.substring(2, s.length() - 2).replace("},{", "/") + "/";

        //list 에 집합별로 넣음
        while (s.contains("/")) {
            int sep = s.indexOf('/');
            list.add(s.substring(0, sep));
            s = s.substring(sep + 1);
        }

        //부분집합의 갯수가 곧 result 의 갯수
        int[] answer = new int[list.size()];

        //list 원소 갯수 기준 정렬
        list.sort(Comparator.comparingInt(String::length));

        //set 에 넣어서 신규 요소인지 판단하기 위함
        HashSet<Integer> set = new HashSet();

        //answer 채우기
        int idx = 0;
        for (String str : list) {
            String[] nums = str.split(",");
            for (String num : nums) {
                boolean isNew = set.add(Integer.valueOf(num));
                if (isNew) {
                    answer[idx++] = Integer.valueOf(num);
                }
            }
        }
        return answer;
    }
}

 

반응형
  • 네이버 블러그 공유하기
  • 네이버 밴드에 공유하기
  • 페이스북 공유하기
  • 카카오스토리 공유하기