본문 바로가기

Programmers

[프로그래머스][JAVA]Lv. 2 - 튜플

https://school.programmers.co.kr/learn/courses/30/lessons/64065

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

문제 자체는 집합의 구성 개수가 작은것 부터 정렬을 하고 중복을 체크하며 결과를 출력하면 끝이었다

그런데 입력이 문자열로 되어있어서 그것을 가지고 해결하는것이 힘들었다

코드를 작성하다보니 길게 작성되었는데, 입력 s의 2번째 인덱스 부터 //},{을 가지고 split을 하면 숫자만 자를 수 있기 때문에 전혀 이럴 필요가 없었다...

import java.util.ArrayList;
import java.util.Arrays;
import java.util.Comparator;
import java.util.HashSet;
class Solution {
    public int[] solution(String s) {
        int[] answer = {};
        String str = s.substring(1, s.length()-1);
        ArrayList<String> al = new ArrayList<>();
        ArrayList<Integer> al2 = new ArrayList<>();
        ArrayList<ArrayList<Integer>> al3 = new ArrayList<>();
        StringBuilder sb = new StringBuilder();
        boolean bl = false;

        for (int i = 0; i < str.length(); i++) {
            if (str.charAt(i) == '}') {
                bl = false;
                al.add(sb.toString());
                sb = new StringBuilder();
                al.add("#");
                continue;
            } else if (str.charAt(i) == '{') {
                bl = true;
                continue;
            }
            if (bl && str.charAt(i) >= '0' && str.charAt(i) <= '9') {
                sb.append(str.charAt(i));
            }
            if (bl && str.charAt(i) == ',') {
                al.add(sb.toString());
                sb = new StringBuilder();
            }
        }
        str = al.toString();
        for (int i = 0; i < str.length(); i++) {
            if (str.charAt(i) >= '0' && str.charAt(i) <= '9') {
                sb.append(str.charAt(i));
            }
            if (str.charAt(i) == ',' && !sb.toString().equals("")) {
                al2.add(Integer.valueOf(sb.toString()));
                sb = new StringBuilder();
            }
            if (str.charAt(i) == '#') {
                al3.add(al2);
                al2 = new ArrayList<>();
            }
        }
        Comparator<ArrayList<Integer>> comparator = new Comparator<ArrayList<Integer>>() {
            @Override
            public int compare(ArrayList<Integer> o1, ArrayList<Integer> o2) {
                return Integer.compare(o1.size(), o2.size());
            }
        };
        al3.sort(comparator);
        HashSet<Integer> hashSet = new HashSet<>();
        ArrayList<Integer> al4 = new ArrayList<>();
        for (int i = 0; i < al3.size(); i++) {
            for (int j = 0; j < al3.get(i).size(); j++) {
                if (!hashSet.contains(al3.get(i).get(j))) {
                    hashSet.add(al3.get(i).get(j));
                    al4.add(al3.get(i).get(j));
                }
            }
        }
        answer = new int[al4.size()];
        for (int i = 0; i < answer.length; i++) {
            answer[i] = al4.get(i);
        }
        return answer;
    }
}