본문 바로가기
Algorithm/Programmers Java

[JAVA] 프로그래머스 LEVEL2 튜플

by 제우제우 2024. 10. 14.

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

 

프로그래머스

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

programmers.co.kr

코딩테스트 연습 > 2019 카카오 개발자 겨울 인턴십 > 튜플

 

난이도: LEVEL2

알고리즘 유형: 구현

 

정답 코드1

import java.util.*;
class Solution {
    ArrayList<ArrayList<Integer>> list = new ArrayList<>();
    ArrayList<Integer> answer = new ArrayList<>();
    public int[] solution(String s) {
        int st = 1;
        int et = 1;
        for(int i = 1; i < s.length() - 1; i++){
            char cur = s.charAt(i);
            if(cur == '}'){
                String str = s.substring(st + 1, i);
                String [] split = str.split(",");
                ArrayList<Integer> temp = new ArrayList<>();
                for(String next : split){
                    temp.add(Integer.parseInt(next));
                }
                list.add(temp);
                st = i + 2;
            }
        }
        Collections.sort(list, (o1, o2) -> {
           return o1.size() - o2.size(); 
        });
        
        int [] answer = new int [list.get(list.size()-1).size()];
        Set<Integer> set = new HashSet<>();
        
        int cnt = 0;
        for(ArrayList<Integer> cur : list){
            for(int next : cur){
                if(set.contains(next)) continue;
                answer[cnt++] = next;
                set.add(next);
                break;
            }    
        }
        return answer;
    }
}

 

정답 코드2 (정답 코드1 리팩토링)

import java.util.*;
class Solution {
    public int[] solution(String s) {
        // 불필요한 문자 제거: "{{", "}}"와 "},{"를 제거하여 숫자만 남도록 변환
        s = s.replaceAll("\\{\\{", "").replaceAll("\\}\\}", "").replaceAll("\\},\\{", "-");
        
        // "-"로 구분하여 각 집합을 배열로 분리
        String[] sets = s.split("-");
        System.out.println(Arrays.toString(sets));
        
        // 각 집합을 파싱하여 리스트에 추가
        List<List<Integer>> list = new ArrayList<>();
        for(String set : sets) {
            List<Integer> temp = new ArrayList<>();
            for(String num : set.split(",")) {
                temp.add(Integer.parseInt(num));
            }
            list.add(temp);
        }
        
        // 리스트의 크기를 기준으로 정렬
        Collections.sort(list, Comparator.comparingInt(List::size));
        
        // 정답 배열 구성
        int[] answer = new int[list.get(list.size()-1).size()];
        Set<Integer> set = new HashSet<>();
        int cnt = 0;
        for(List<Integer> cur : list) {
            for(int next : cur) {
                if(set.contains(next)) continue;
                answer[cnt++] = next;
                set.add(next);
                break;
            }
        }
        return answer;
    }
}