프로그래머스 튜플 Java - 2019 카카오 개발자 겨울 인턴십

문제

주어진 문자열을 튜플단위로 분리한 후에 튜플의 수가 작은 것부터 정렬하여 순서를 만드는 문제이다.

튜플 사이의 위치는 바뀔 수 있기에 {a1, a2} == {a2, a1} 하나의 튜플이 a2 가 먼저나오면 a2 -> a1 으로 반환하면 된다.

접근

풀이

1번

s = s.substring(2, s.length()-2).replace("},{", "-");

String [] arr = s.split("-");
Arrays.sort(arr, new Comparator<String>() {
    @Override
    public int compare(String o1, String o2) {
        return o1.length() - o2.length();
    }
});

ArrayList<Integer> list = new ArrayList<>();
for(String temp : arr) {
    String [] val = temp.split(",");
    
    for(int i=0 ; i<val.length ; i++) {
        int num = Integer.valueOf(val[i]);
        
        if(!list.contains(num)) {
            list.add(num);
        }
    }
}

int [] answer = new int[list.size()];
for(int i=0 ; i<list.size() ; i++) {
    answer[i] = list.get(i);
}

return answer;

2번 Tokenizer 사용

StringTokenizer st = new StringTokenizer(s, "{}");
		
ArrayList<String> list = new ArrayList<>();
while(st.hasMoreTokens()) {
    String temp = st.nextToken();
    if(!temp.equals(","))
        list.add(temp);
}

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


ArrayList<String> answerList = new ArrayList<>();

for(String temp : list) {
    String [] arr = temp.split(",");
    
    for(int i=0 ; i<arr.length ; i++) {
        if(!answerList.contains(arr[i])) {
            answerList.add(arr[i]);
        }
    }
}

int [] answer = new int[answerList.size()];
for(int i=0 ; i<answerList.size() ; i++) {
    answer[i] = Integer.parseInt(answerList.get(i));
}

return answer;	

이 문제는 문자열을 적절한 형태로 변환하여 우너하는 값을 도출할 수 있는지를 물어보는 문제이다. split(), tokenizer()의 사용법을 익혀서 활용할 수 있어야 하고 정렬 방식을 오버라이딩하여 원하는 방식으로 기능을 확장하여 사용할 수 있어야 한다.

결론



Related Posts