안녕하세요!

 

이번에도 Programmers 문제입니다.

 

이번 문제는 2019 카카오톡 개발자 겨울 인턴십에 나온 문제라고 합니다.

 

이번에도 별 다른 설명 없이 기록용으로 바로 풀이를 해볼게요!

* 효율성이 떨어져도 이해해주세요! 피드백 감사하게 받겠습니다!

 

 

1. Solved with Java

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
import java.util.List;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Map;
import java.util.HashMap;
 
class Solution {
    public int[] solution(String s) {
        Map<StringString[]> check = new HashMap<StringString[]>();
        List<Integer> resultList = new ArrayList<Integer>();
        String[] splitStr = splitString(s);
        return test(splitStr, resultList, check);
    }
    
    private static int[] test(String[] splitString, List<Integer> resultList,
                             Map<StringString[]> check){
        for(int i=0; i<splitString.length; i++){
            String[] tmpArr = splitString[i].split(",");
            if(splitString.length==1){
                int[] resultArr = {Integer.parseInt(tmpArr[0], 10)};
                return resultArr;
            } else {
                check.put(""+tmpArr.length, tmpArr);
            }
        }
        for(int i=1; i<splitString.length+1; i++){
            for(String el:check.get(""+i)){
                if(!resultList.contains(Integer.parseInt(el))){
                    resultList.add(Integer.parseInt(el));
                }
            }
        }
        int[] resultArr = new int[resultList.size()];
        for(int i=0; i<resultList.size(); i++){
            resultArr[i] = resultList.get(i);
        }
        
        return resultArr;
    }
    
    private static String[] splitString(String s){
        s = s.replaceAll("\\{\\{""");
        s = s.replaceAll("\\}\\}""");
        return s.split("(\\},\\{)");
    }
}
cs

 

 

2. Solved with Python 2, 3

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
def solution(s):
    return parseString(s)
 
def parseString(s):
    dictionary = {}
    convert = s.split("},{")
    if len(convert) == 1:
        convert[0= convert[0].split("{{")[1]
        convert[0= convert[0].split("}}")[0]
        convert[0= int(convert[0], 10)
        return convert
    convert[0= convert[0].split("{")[-1]
    convert[len(convert)-1= convert[len(convert)-1].split("}")[0]
    for i in range(0len(convert)):
        convert[i] = convert[i].split(",")
    for i in convert:
        dictionary[len(i)] = convert.index(i)
    result = []
    for i in range(1len(convert)+1):
        tmp = convert[dictionary[i]]
        for j in tmp:
            if int(j, 10not in result:
                result.append(int(j, 10))
    return result
cs

 

※ 여담이지만 솔직히 이번에 문제에서는 split("},{") 으로 나눠주면서 Java보다는 Python이 확실히 편하더군요. (개인적인 생각입니다!)

    Python 에서는 "},{" 로만 해줘도 하나의 문자열로 인식을 하는데,

    Java 에서는 중괄호를 각각 인식해주기 위해서 "\\"를 사용해야하지, ','를 넣어주고 따로 지정해주지 않으면

    모든 ','를 split 대상으로 인식해서 다 split 되어 버리지... 그거 인식해주려고 소괄호로 묶어서 하나의 문자열로 인식을

    해줘야 하는게 번거롭더군요. (제가 못해서 그래요 헿)

    아무튼 각각의 어떤 언어가 좋고 나쁘다는 말할 수 없다고 생각하고, 각각의 장단점이 있는 것 같습니다.

 

 

 

 

 

 

위 코드의 결과는 직접 확인해 보세요 ~!

 

 

 

 

 

 

 

+ Recent posts