Free Lines Arrow
본문 바로가기
Algorithm/프로그래머스 알고리즘

[프로그래머스] tuple

by skahn1215 2021. 9. 7.
728x90
반응형

문제

 

 

분석

  • 문자열에서 먼저 힌트를 찾을수 있었다. 
  • 정해진 패턴 대로 들어온다.
    "{{2},{2,1},{2,1,3},{2,1,3,4}}"
  • 잘 보면 길이 순으로 튜플이 만들어 진다.
  • 다음 두가지 조건을 지키면된다.
    - {2} {2,3} {2,4,3} 
    - 짧은 길이 숫자를 먼저 집합에 넣는다.
    - 중복이 안되게 한다.

 

 

구현

import java.util.*;


class Solution {
    public int[] solution(String s) {
    
        s = s.replace("{","");
        s = s.replace("}}","");
        System.out.println(s);
        String []splitArray = s.split("}");
        
        List<int[]> setIntList = new ArrayList<>();
    
        Arrays.sort(splitArray, (s1,s2)-> {return s1.length()-s2.length(); } );    
        
        for(int i = 0; i < splitArray.length; i++) {
            String []tuple = splitArray[i].split(",");
            int []tupleArray = Arrays.stream(tuple).filter(s2->!s2.isEmpty()).mapToInt(Integer::parseInt).toArray();
            setIntList.add(tupleArray);
        }
        
        
        List<Integer> answerList = new ArrayList<>();
        for(int i = 0; i <setIntList.size(); i++) {
            int [] arr = setIntList.get(i);
            for(int j = 0; j < arr.length; j++) {
                if(!answerList.contains(arr[j]))
                {
                    answerList.add(arr[j]);
                }
            }
        }
        
        int []answer = answerList.stream().mapToInt(Integer::intValue).toArray();
        return answer;
    }
}

 

 

결과

 

 

 

 

더생각해보기

  • 효율성이 많이 떨어진다. 개선할 필요가 있다.
  • stream 을 2번 사용했는데 한번에 해결하는 방법이 있을것 같다.
  • 코드의 수를 줄여야 된다고 생각한다.

 

 

 

 

문제링크:

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

 

코딩테스트 연습 - 튜플

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

 

728x90
반응형

댓글