코딩테스트 - 프로그래머스/JAVA
[프로그래머스 / 2019 카카오 개발자 겨울 인턴십 / 자바(JAVA)] 튜플
읁;
2024. 4. 23. 15:55
문제 링크 : https://school.programmers.co.kr/learn/courses/30/lessons/64065
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
[ 풀어보기 ]
정답 풀이
📌 로직
- replace를 활용해 문자열 s의 양 옆의 "{{" 와 "}}" 를 떼어주자.
- {{2},{2,1},{2,1,3},{2,1,3,4}} → 2},{2,1},{2,1,3},{2,1,3,4
- 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한다.
- 위 strList 를 문자열의 길이가 짧은 것부터 긴 순으로 정렬해준다.
- strList 에서 문자열을 하나씩 차례로 꺼낸다. (꺼낸 문자열을 a라고 칭함)
- a를 "," 으로 나누고, 이를 하나씩 차례로 꺼낸다. (꺼낸 문자열을 b라고 칭함)
- b가 Integer ArrayList인 intList에 들어있지 않으면, b를 intList에 넣어준다.
- 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채점결과
[배운 점]
📌 배운 것
-
- split() 사용 시, 매개변수로 일부 특수문자를 전달할 때는 이스케이프 처리를 해주어야 한다.
https://eunzzzzz1.tistory.com/32
- split() 사용 시, 매개변수로 일부 특수문자를 전달할 때는 이스케이프 처리를 해주어야 한다.
[에러로그 / 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