본문 바로가기
JAVA/Coding Test Study

[Lv.2] 프로그래머스 - 튜플 : Java

by ♡˖GYURI˖♡ 2024. 4. 15.
728x90
 

프로그래머스

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

programmers.co.kr

 

 

 

이해하기

처음에 풀었던 방법은 다음과 같았다.

  • s를 char 배열로 만든다.
  • list를 두 개 만든다.
  • for문으로 char 배열을 순회한다.
    • c가'{'이 아니고 ','도 아니고, '}'도 ㅏ니라면 list2.add(c - '0')
    • c가 '}'라면 해당 배열의 끝을 만난 것이라고 판단
      • int 배열에 list2를 옮겨 담아서 list.add()
      • list2.clear()
  • list를 길이 순서대로 정렬
  • for문을 돌며 answer에 들어있지 않은 숫자를 add
  • return answer

사실상 스트링을 어떻게 배열로 만드는지가 제일 복잡하다고 생각됐다.

결국 오답이었구... ㅜㅅㅜ

 

다른 글들을 좀 찾아보니 내가 너무 어렵게만 생각했다.

 

참고한 블로그⬇️

 

[프로그래머스,Level 2] 튜플 (JAVA 구현)

- 첫 풀이 및 정답풀이 이 문제는 튜플에 속하는 원소들이 주어져 그것을 바탕으로 튜플을 구하는 것인 문제이다. 입출력 예제 1번을 통해 살펴보면, [2, 1, 3, 4]라는 튜블이 있을 때 이 튜블에 속

fbtmdwhd33.tistory.com

 

s = "{{4,2,3},{3},{2,3,4,1},{2,3}}" 일 때, 일단 앞 뒤의 "{{"와 "}}"부터 떼어낸다.

그럼 s = "4, 2, 3},{3},{2,3,4,1},{2,3" 이 되는데 이 때 "},{"를 전부 "-" 같은 문자로 바꿔주고, s.split("-") 해준다.

이 때 만들어진 String 배열은 {"4,2,3", "3", "2,3,4,1", "2,3"}이다. 아직 ,(콤마)가 들어가 있는 상태다.

 

Arrays.sort()로 길이 순서대로 정렬해준다.

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

 

이제 for문으로 순회하며 하나씩 받아온 후 다시 배열화한다.

e.g. "4,2,3" -> s.split(",") -> {"4", "2", "3"}

 

그런 다음 방금 만든 배열에서 숫자를 하나씩 가져와서 Integer화 한 후 만약 answer가 해당 숫자를 포함하지 않는다면 add해준다.

 

가장 다른 부분이 String 문자열을 배열화하는 부분같다.

좀 더 크게 봤어야 하는 문제 ~('~')~

 

 

문제풀이

import java.util.*;

class Solution {
    public int[] solution(String s) {
        ArrayList<Integer> answer = new ArrayList<>();
        s = s.substring(2);
        s = s.substring(0, s.length() - 2);
        s = s.replace("},{", "-");
        String[] str = s.split("-");

        Arrays.sort(str, new Comparator<String>() {
            @Override
            public int compare(String o1, String o2) {
                return o1.length()- o2.length();
            }
        });

        for (String x : str) {
            String[] tmp = x.split(",");
            for (int i = 0; i < tmp.length; i++) {
                int n = Integer.parseInt(tmp[i]);
                if (!answer.contains(n)) {
                    answer.add(n);
                }
            }
        }

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