[2019 카카오 겨울인턴] 튜플 (JAVA)
<접근 방법>
1. 입력으로 들어온 스트링을 1 1,2 1,2,3 ... 과 같이 정리하기
1) 입력의 첫번째와 마지막을 감싸고 있는 중괄호 벗겨내기
->String 메서드 s.substring 이용
2) 입력의 "},{"을 "/" 로 치환하기
-> replace 이용
split에 "},{" 들어가면 오류나서.. 아마 입력에 "},{"가 한 묶음처럼 나타나지 않는 부분도 있어서 그런듯
3) 치환된 "/"를 기준으로 스트링 나누어 스트링배열 만들기
-> String 메서드 s.split("") 이용
String subS=s.substring(2, s.length()-2);
subS=subS.replace("},{","/");
String[] arrS=subS.split("/");
answer=new int[arrS.length];
2. 정리된 스트링 배열을 오름차순으로 정리하기
Arrays.sort(배열,정렬방법)
-> 정렬방법 : Comparator 이용하여 정의
Comparator<String> c = new Comparator<String>() {
public int compare(String s1, String s2) {
return Integer.compare(s1.length(), s2.length());
}
};
Arrays.sort(arrS, c);
3. (실패했지만 나의 시도)
1) 반복문을 통해 스트링 배열에 접근
2) 해당 원소의 ","를 없앤다
-> s[i]=s[i].replace(",","")
3) 그러면 남은 것은 오직 숫자뿐! 그것을 정답 배열에 넣어준다
4) 바로 다음 원소부터 끝까지 이 숫자를 ","로 치환한다
5) 반복반복
for(int i=0;i<arrS.length;i++) {
arrS[i]=arrS[i].replace(",","");
answer[i]=Integer.parseInt(arrS[i]);
for(int j=i+1;j<arrS.length;j++) {
String num=Integer.toString(answer[i]);
arrS[j]=arrS[j].replace(num, ",");
}
}
몇몇 테스트케이스에 대해선 정답인데, 틀린 경우가 나옴 ㅠㅠ
아직도 왜인지 모르겠음 흑흑
4. (정답인 남의 시도)
1) HashSet를 활용한다 : 중복 허용하지 않고 순서 관계없는 자료구조
2) for-each 반복문으로 생성한 배열에 접근
3) 배열 원소를 ","로 split하여 하나하나 숫자에 대해 접근
4) HashSet에 넣을 수 있다면 정답배열로 넣기
Set<String> set=new HashSet<String>();
int idx=0;
for(String s1: arrS){
for(String s2: s1.split(",")){
if(set.add(s2)) answer[idx++]=Integer.parseInt(s2);
}
}
으앙으앙
<전체코드>
package kakao;
import java.util.*;
public class tuple {
static int[] solution(String s) {
int[] answer;
Set<String> set=new HashSet<String>();
String subS=s.substring(2, s.length()-2);
subS=subS.replace("},{","/");
String[] arrS=subS.split("/");
answer=new int[arrS.length];
Comparator<String> c = new Comparator<String>() {
public int compare(String s1, String s2) {
return Integer.compare(s1.length(), s2.length());
}
};
Arrays.sort(arrS, c);
/*
for(int i=0;i<arrS.length;i++) {
arrS[i]=arrS[i].replace(",","");
answer[i]=Integer.parseInt(arrS[i]);
for(int j=i+1;j<arrS.length;j++) {
String num=Integer.toString(answer[i]);
arrS[j]=arrS[j].replace(num, ",");
}
}
*/
int idx=0;
for(String s1: arrS){
for(String s2: s1.split(",")){
if(set.add(s2)) answer[idx++]=Integer.parseInt(s2);
}
}
return answer;
}
public static void main(String[] args) {
// TODO Auto-generated method stub
int[] a=solution("{{4,2,3},{3},{2,3,4,1},{2,3}}");
for(int i=0;i<a.length;i++) {
System.out.println(a[i]);
}
}
}
제 코드 반례좀 찾아주세용 ㅠㅠ
for-each 친숙해지기!
자료구조 능숙하게 사용하기