본문 바로가기

Coding Test/프로그래머스

[프로그래머스/자바] 튜플

❌ 실패 코드(런타임 에러) ❌

String을 계속해서 수정하는 코드라 그런지 런타임 에러가 났다.

  

import java.util.Arrays;
import java.util.Comparator;

class Solution {
    public int[] solution(String s) {
        int[] result;
        if(!s.contains(",")){
            result = new int[1];
            result[0] = Integer.parseInt(s.substring(2, s.length() - 2));
        } else {
            String[] bits = s.substring(2, s.length() - 2).split("},\\{");
            Arrays.sort(bits, Comparator.comparingInt(String::length));
            result = new int[bits.length];
            for(int i=0; i<bits.length; i++){
                String target = bits[i];
                result[i] = Integer.parseInt(target);
                for(int j=i+1; j<bits.length; j++){
                    if(bits[j].contains(target + ","))
                        bits[j] = bits[j].replace(target + ",", "");
                    else bits[j] = bits[j].replace("," + target, "");
                }
            }
        }
        return result;
    }
}

✅ 성공 코드 ✅

String을 수정하는 대신 List와 int[]을 사용했다.

  

import java.util.ArrayList;
import java.util.Arrays;
import java.util.Comparator;
import java.util.List;

class Solution {
    public int[] solution(String s) {
        int[] result;
        List<Integer> list = new ArrayList<>();
        if(!s.contains(",")){
            result = new int[1];
            result[0] = Integer.parseInt(s.substring(2, s.length() - 2));
        } else {
            String[] bits = s.substring(2, s.length() - 2).split("},\\{");
            Arrays.sort(bits, Comparator.comparingInt(String::length));
            for(String bit : bits){
                String[] temp = bit.split(",");
                for(int i=0; i<temp.length; i++){
                    int num = Integer.parseInt(temp[i]);
                    if(!list.contains(num)) list.add(num);
                }
            }
            result = new int[list.size()];
            for(int i=0; i<list.size(); i++){
                result[i] = list.get(i);
            }
        }
        return result;
    }
}

* 다른 분 풀이(참고용)

  

import java.util.*;
class Solution {
    public int[] solution(String s) {
        Set<String> set = new HashSet<>();
        String[] arr = s.replaceAll("[{]", " ").replaceAll("[}]", " ").trim().split(" , ");
        Arrays.sort(arr, (a, b)->{return a.length() - b.length();});
        int[] answer = new int[arr.length];
        int idx = 0;
        for(String s1 : arr) {
            for(String s2 : s1.split(",")) {
                if(set.add(s2)) answer[idx++] = Integer.parseInt(s2);
            }
        }
        return answer;
    }
}