티스토리 뷰

728x90

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

 

프로그래머스

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

programmers.co.kr

 

2019 카카오 개발자 겨울 인턴십 Level 2 문제다.

 

 

{}로 구분을 해 각 집합을 ArrayList에 넣고,

ArrayList의 길이에 따라 정렬한다.

그리고 순서대로 HashMap에 넣으면서 튜플을 생성한다.

 

튜플의 각 숫자를 넣은 순서대로 하기 위해 HashMap의 키값에 인덱스를 부여하고 

인덱스 값에 따라 정렬했는데, LinkedHashSet을 사용하거나 HashSet의 add함수를 사용해도 된다.

또한 전달인자로 들어온 String s 값을 하나하나 비교했지만

{ }를 replaceAll로 치환 후 각 집합을 구분해도 될 것같다.

 

너무 단순하고 일차원적인 방법만 생각해낸 거 같은데,

다른 분들 풀이를 보면서 더 직관적인 코드를 배워가는 것도 재밌다.

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;

class Solution {
    public int[] solution(String s) {
        ArrayList<ArrayList<Character>> list = new ArrayList<>();
        ArrayList<Character> tmp = new ArrayList<>();
        
        for(int i=0;i<s.length();i++) {
            char c = s.charAt(i);
            if(c == '}') {
                list.add(new ArrayList<>(tmp));
                tmp.clear();
            }
            if(c == '{' || c == '}' || (c == ',' && s.charAt(i - 1) == '}'))
                continue;
            tmp.add(c);
        }
        
        list.remove(list.size() - 1);
        list.sort((o1, o2) -> o1.size() - o2.size());
        
        HashMap<Integer, Integer> map = new HashMap<>();
        StringBuilder sb = new StringBuilder();
        int idx = 0;
        
        for(ArrayList<Character> l : list) {
        	for(char c : l) {
        		if(c == ',') {
        			int i = Integer.parseInt(sb.toString());
        			if(!map.containsKey(i))
        				map.put(i, idx++);
        			sb.setLength(0);
        			continue;
        		}
        		sb.append(c);
        	}
        	int i = Integer.parseInt(sb.toString());
            if(!map.containsKey(i))
    			map.put(i, idx++);
            sb.setLength(0);
        }
        
        // map에 넣은 순서(value)에 따라 정렬
        List<Map.Entry<Integer, Integer>> entries =
                map.entrySet().stream()
                        .sorted(Map.Entry.comparingByValue())
                        .collect(Collectors.toList());
        
        int[] ans = new int[idx];
        
        idx = 0;
        for (Map.Entry<Integer, Integer> entry : entries) 
        	ans[idx++] = entry.getKey();
        
        return ans;
    }
}
728x90
250x250
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
TAG
more
«   2025/09   »
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30
글 보관함