본문 바로가기
프로그래머스/Lv.2

2019 카카오 개발자 겨울 인턴십 > 튜플 - JAVA

by 아찌방 2024. 1. 10.

 

 

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

 

프로그래머스

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

programmers.co.kr

 

풀이 - 나의 생각

튜플을 보면

 

숫자가 하나씩 늘어나는 것을 볼 수 있는데

 

길이가 늘어났을 때

 

새로운 숫자가

 

늘어난 길이 = index에 해당하는 값이다.

 

 

위의 그림처럼

 

문자열을 길이 순으로 정렬 하고 보면

 

바로 보일 것이다.

 

그래서 Set을 사용해서 새로운 값이라면 Answer에 값을 넣으면

 

정답이 나오는 것을 볼 수 있을 것이다.

 

풀이

 

주어지는게 문자열이 아니라 배열이였으면 더욱 쉬웠을 텐데

 

짜증나게 문자열로 주어진다.

 

"{{4,2,3},{3},{2,3,4,1},{2,3}}"

 

이렇게 주어지면

 

저걸 나누는게 1번이다.

 

이걸위해 split을 정규형과 함께 사용했다.

 

String[] parts = s.substring(2, s.length() - 2).split("\\},\\{");


일단 첫번째, 두번째 "{" , 맨 뒤와 그 앞의 "}"을 substring으로 날립니다.

 

그러면

 

4,2,3},{3},{2,3,4,1},{2,3

 

이렇게 남겠죠?

 

그러면

 

나머지를 }, { 를 기준으로 나눠줍니다.

 

그러면 

 

4,2,3 / 3 / 2,3,4,1 / 2,3 으로 나눠지겠죠?

 

그럼 2번째 입니다.

 

나눠진 문자열의 길이 순으로 정렬을 해줍니다.

 

Arrays.sort(parts,(a,b) -> (a.length() - b.length()));

 

이렇게 하면

 

 3 / 2,3  / 4,2,3 / 2,3,4,1 순으로 정렬이 됩니다!

 

그러면 나머지는 식은 죽 먹기죠?

 

코드

 

import java.util.*;

class Solution {
    public int[] solution(String s) {
        /*
        중복 가능, 순서 의미 있음
        arr[배열의 길이-1]에서 새로운 값은 배열의 길이 - 1 위치한다.
        */
        String[] parts = s.substring(2, s.length() - 2).split("\\},\\{");
        Set<String> set = new HashSet<>();
        int size = parts.length, index = 0;
        int[] answer = new int[size];
        Arrays.sort(parts,(a,b) -> (a.length() - b.length()));
        
        for(String part : parts){
            for(String num : part.split(",")){
                if(set.add(num)) answer[index++] = Integer.parseInt(num);
            }
        }
        
        return answer;
    }
}

 

 

 

 

 

 

 

다음에 또 봐요

 

728x90