https://programmers.co.kr/learn/courses/30/lessons/64065?language=java 

 

코딩테스트 연습 - 튜플

"{{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

 


풀이 과정


  1. 우선 주어진 문자열의 양쪽 중괄호를 제거한다.
  2. 정규 표현식을 사용하여 {} 내부의 값들로만 이루어진 Set 리스트를 만들어 준다.
    1. "{" 나 "}" 를 정규 표현식을 사용하여 표시하기 위해서는 "\\{", "\\}"로 표시해주면 된다.
    2. 정규 표현식으로 괄호를 포함한 문자열을 추출했다면, 괄호를 제거한 다음 "," 를 기준으로 split 해준 다음 Set을 만들어준다.
  3. Set 리스트를 길이 순으로 오름차순 정렬한다.
  4. 튜플을 구해준다.
    1. 남아있는 집합중 길이가 가장 짧은 Set을 가져온 다음, 여지껏 방문했던 집합을 빼준다.
    2. 빼주게 되면, 하나의 요소가 남는데 해당 요소가 튜플의 요소이므로 튜플에 추가한다.

소스 코드


import java.util.*;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

class Solution {

    public ArrayList<String> extractSetList(String s) {
        String regex = "\\{[0-9|,]+\\}";
        Pattern pattern = Pattern.compile(regex);
        Matcher matcher = pattern.matcher(s);
        String target = s.substring(1, s.length()-1);
        ArrayList<String> setList = new ArrayList<String>();
        while (matcher.find()) {
            setList.add(matcher.group());
        }
        return setList;
    }

    public Set<String>[] extract(String s) {
        ArrayList<String> setList = extractSetList(s);
        return setList.stream()
                .map(p -> {
                    p = p.substring(1, p.length()-1);
                    String[] setInformation = p.split(",");
                    return new HashSet(Arrays.asList(setInformation));
                })
                .toArray(i -> new HashSet[i]);
    }

    public int[] solution(String s) {
        List<String> answer = new ArrayList<String>();
        Set<String> currentSet = new HashSet<>();

        Set<String>[] sets = extract(s);

        Arrays.sort(sets, (p1, p2) -> {
           return Integer.compare(p1.size(), p2.size());
        });

        for (Set<String> targetSet : sets) {
            targetSet.removeAll(currentSet);
            String targetElement = targetSet.iterator().next();
            answer.add(targetElement);
            currentSet.addAll(targetSet);
        }

        return answer.stream()
                .mapToInt(i -> Integer.parseInt(i))
                .toArray();
    }


}

+ Recent posts