코딩테스트 - 프로그래머스/JAVA

[프로그래머스 / 2019 카카오 개발자 겨울 인턴십 / 자바(JAVA)] 튜플

읁; 2024. 4. 23. 15:55

문제 링크 : https://school.programmers.co.kr/learn/courses/30/lessons/64065

 

프로그래머스

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

programmers.co.kr

[ 풀어보기 ]

 

정답 풀이

 

📌 로직

  1. replace를 활용해 문자열 s의 양 옆의 "{{" 와 "}}" 를 떼어주자. 
    • {{2},{2,1},{2,1,3},{2,1,3,4}} →   2},{2,1},{2,1,3},{2,1,3,4
  2. split을 활용해 변형된 문자열을 "},{" 으로 나눠 String ArrayList인 strList에 넣어준다.
    • 2},{2,1},{2,1,3},{2,1,3,4 → 2 / 2, 1 / 2, 1, 3 / 2, 1, 3, 4 로 나뉘어 add한다.
  3. strList 를 문자열의 길이가 짧은 것부터 긴 순으로 정렬해준다.
  4. strList 에서 문자열을 하나씩 차례로 꺼낸다. (꺼낸 문자열을 a라고 칭함)
    • a를 "," 으로 나누고, 이를 하나씩 차례로 꺼낸다. (꺼낸 문자열을 b라고 칭함)
    • b가 Integer ArrayList인 intList에 들어있지 않으면, b를 intList에 넣어준다.
  5. intList를 Array로 변형해 return한다.

 

📌 코드

// PM 3:09 ~ 3:27

import java.util.*;

class Solution {
    public int[] solution(String s) {
        
        List<String> strList = new ArrayList<>();
        List<Integer> intList = new ArrayList<>();
        
        // 1. 문자열 양 옆의 "{{"와 "}}"를 떼어내기
        s = s.replace("{{","").replace("}}","");
        
        // 2. "},{"을 기준으로 split 해 strList에 담기
        for(String a : s.split("\\},\\{")) {
            strList.add(a);
        }
        
        // 3. 각 요소의 길이를 기준으로 strList를 오름차순 정렬
        Collections.sort(strList, (v1, v2) -> v1.length() - v2.length());
        
        // 4. strList에서 요소를 하나씩 꺼내서
        for(String a : strList) {
        
            // ","를 기준으로 split 함
            for(String b : a.split(",")) {
            	// 만약 intList에 b가 포함되어있지 않으면, b를 add
                if(!intList.contains(Integer.parseInt(b)))
                    intList.add(Integer.parseInt(b));
            }
        }

        // 5. intList를 array로 변형해 return
        return intList.stream().mapToInt(i -> i).toArray();
    }
}코드쓰기

 

📌 채점 결과

정확성  테스트
테스트 1 〉	통과 (2.58ms, 77.6MB)
테스트 2 〉	통과 (2.44ms, 75.9MB)
테스트 3 〉	통과 (2.93ms, 77.7MB)
테스트 4 〉	통과 (2.91ms, 73.2MB)
테스트 5 〉	통과 (5.69ms, 81.8MB)
테스트 6 〉	통과 (7.86ms, 73.6MB)
테스트 7 〉	통과 (30.20ms, 81.3MB)
테스트 8 〉	통과 (54.19ms, 85.8MB)
테스트 9 〉	통과 (32.27ms, 90MB)
테스트 10 〉	통과 (44.84ms, 86.3MB)
테스트 11 〉	통과 (87.00ms, 89.5MB)
테스트 12 〉	통과 (84.95ms, 97.2MB)
테스트 13 〉	통과 (94.33ms, 96MB)
테스트 14 〉	통과 (109.31ms, 100MB)
테스트 15 〉	통과 (2.52ms, 76.3MB)

채점 결과
정확성: 100.0
합계: 100.0 / 100.0채점결과

 


[배운 점]

 

📌 배운 것

 

[에러로그 / JAVA] java.util.regex.PatternSyntaxException / String split() 사용 시 에러

[ java.util.regex.PatternSyntaxException ] 📌 에러 전문 Exception in thread "main" java.util.regex.PatternSyntaxException: Illegal repetition near index 3 },{ at java.base/java.util.regex.Pattern.error(Pattern.java:2029) at java.base/java.util.regex.

eunzzzzz1.tistory.com