안녕하세요 !

 

이번 포스팅은 올려도 되는지 모르겠는데 이미 공개가 되었다고 하니까 올려봅니다! (문제 되면 지우도록 하겠습니다.)

 

프로그래머스 문제 찾아보다가 월간 코드 챌린지라는게 있어서 풀어봤어요.

 

사용 가능한 프로그래밍 언어는 굉장히 제한적입니다.

 

이번에도 문제는 프로그래머스에 있으니 직접 찾아보시고, 바로 풀이만 진행할게요! 해설 없어요!

 

* Java / Python3으로 진행 하였습니다.

 

 

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
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
class Solution {
    private static int num = 0;
    public int[] solution(int n) {
        int[][] triangle = triangleList(n);
        int[] answer = new int[num];
        int len = 0;
        for(int[] arrEl:triangle) {
            for(int el:arrEl) {
                answer[len] = el;
                len++;
            }
        }
        return answer;
    }
    
    private static int[][] triangleList(int n){
        int[][] triangle = new int[n][];
        for(int i=1; i<n+1; i++){
            num+=i;
            triangle[i-1= new int[i];
        }
        int count=0, idx=1;
        int minHeight=0, maxHeight=n, minWidth=0, maxWidth=n;
        while (count<=num) {
            int i=minHeight, j=minWidth;
            for(i=minHeight; i<maxHeight; i++) {
                count++;
                if (count==num) {
                    triangle[i][j] = count;
                    return triangle;
                }
                triangle[i][j] = count;
            }
            minWidth++;
            i--;
            for(j=minWidth; j<maxWidth; j++) {
                count++;
                if(count==num) {
                    triangle[i][j] = count;
                    return triangle;
                }
                triangle[i][j] = count;
            }
            maxHeight -= 2;
            j = triangle[i-1].length - idx;
            for(i=maxHeight; i>minHeight; i--) {
                count++;
                if (count==num) {
                    triangle[i][j] = count;
                    return triangle;
                }
                triangle[i][j] = count;
                j--;
            }
            maxHeight++;
            minHeight += 2;
            maxWidth -= 2;
            idx++;
        }
        return triangle;
    }
}
cs

 

 

2. Solved with Python3

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
47
48
49
50
51
def solution(n):
    answer = appendEl(triangleList(n))
    return answer
 
def triangleList(n):
    triangle = []
    for i in range(1, n+1):
        triangle.append([0 for _ in range(i)])
    num = sum(range(1, n+1))
    count = 0
    minHeight = 0
    maxHeight = n
    minWidth = 0
    maxWidth = n
    idx = 1
    while count <= num:
        i = minHeight
        j = minWidth
        for i in range(minHeight, maxHeight):
            count += 1
            if count == num:
                triangle[i][j] = count
                return triangle
            triangle[i][j] = count
        minWidth += 1
        for j in range(minWidth, maxWidth):
            count += 1
            if count == num:
                triangle[i][j] = count
                return triangle
            triangle[i][j] = count
        maxHeight -= 2
        j = len(triangle[i-1])-idx
        for i in range(maxHeight, minHeight, -1):
            count += 1
            if count == num:
                triangle[i][j] = count
                return triangle
            triangle[i][j] = count
            j -= 1
        maxHeight += 1
        minHeight += 2
        maxWidth -= 2
        idx += 1
    return triangle
 
def appendEl(triangleList):
    result = []
    for i in triangleList:
        result += i
    return result
cs

 

 

 

 

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

안녕하세요 !

 

9월 부터 연말까지 바빠져서

지금 시간이 조금 나서 올리게 되었습니다!

 

이번에도 ~ Programmers 문제 입니다.

 

저번에는 소수를 찾는 거였다면

이번 포스팅은 소수를 만드는 거에요.

 

저번 포스팅들과 마찬가지로 문제는 Programmers에 있으니 직접 검색해 보세요 ~!

 

이번에도 기록용 입니다

별다른 풀이는 하지 않을게요!

 

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
47
import java.util.Arrays;
import java.lang.Math;
 
class Solution {
    private static int answer = 0;
    
    public int solution(int[] nums) {
        int[] comArr = new int[3];
        combination(comArr, nums.length300, nums);
 
        return answer;
    }
    
    private static void combination(int[] comArr, int n, int r,
                                   int index, int target, int[] nums){
        if (r==0){
            if(checkPrime(Arrays.stream(comArr).sum())){
                answer++;
            }
            return;
        }
        if(target==n) return;
        
        comArr[index] = nums[target];
        combination(comArr, n, r-1, index+1, target+1, nums);
        combination(comArr, n, r, index, target+1, nums);
    }
    
    private static boolean checkPrime(int check) {
        int count=0;
        double checkSqrt = Math.sqrt(check);
        double checkZero = checkSqrt - (int)checkSqrt;
        if(checkZero!=0.0) {
            for(int i=1; i<(int)checkSqrt+1; i++) {
                if(check%i==0) {
                    count++;
                }
            }
            count++;
        }
        if(count==2) {
            return true;
        } else {
            return false;
        }
    }
}
cs

 

 

 

2. Solved with Python3 (Python2 버전은 Programmers에서 해당 문제에서는 풀이 언어로 선택 할 수 없어서 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
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
from itertools import combinations
from math import sqrt
 
def solution(nums):
    return solve(nums)
 
def solve(combLi):
    primeCount = 0
    for i in combiList(combLi):
        if primeCheck(sum(i)):
            primeCount+=1
        else:
            pass
    
    return primeCount
 
def primeCheck(num):
    numSqrt = sqrt(num)
    checkSqrt = int(numSqrt)+1
    checkZero = numSqrt - int(numSqrt)
    count = 0
    if sqrtCheck(checkZero):
        for i in range(1, checkSqrt):
            if(num%i==0):
                count+=1
            else:
                pass
        count+=1
        if count==2:
            return True
        else:
            return False
    else:
        return False
 
def combiList(nums):
    return list(combinations(nums, 3))
 
def sqrtCheck(checkZero):
    if checkZero!=0.0:
        return True
    else:
        return False
cs

 

 

 

 

 

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

 

 

 

 

 

 

안녕하세요!

 

이번에도 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 되어 버리지... 그거 인식해주려고 소괄호로 묶어서 하나의 문자열로 인식을

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

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

 

 

 

 

 

 

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

 

 

 

 

 

 

 

안녕하세요.

 

이번에는 Project Euler에 이어서 Programmers 문제를 가져왔습니다 !

 

이번에도 마찬가지로 기본적인 알고리즘 코딩이 많이 부족하다고 생각하여 효율이 떨어지더라도 우선 문제를 풀어보는거에 중점을 두고,

필요 API등만 검색해보고 직접 풀어보는 형식으로 진행 하였습니다.

* 아마 문제를 검색해보시면 풀이 방법들이 많이 잘 나와 있을거에요. (위에서 언급한대로 문제 자체를 검색하지 않았다는 점 말씀드립니다.)

 

이번에도 소스코드에 대한 설명은 없이 기록용이므로 바로 풀이를 하도록 하겠습니다.

* 문제 풀이는 Java, Python 2버전, Python 3 버전을 사용하여 진행 하였습니다.

 

Programmers의 문제는 한글로 되어있고, 금방 찾아 보실 수 있으니 문제 내용은 생략 하도록 하겠습니다.

 

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
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
import java.lang.Math;
import java.util.Arrays;
import java.util.List;
import java.util.ArrayList;
import java.util.LinkedList;
 
class Solution {
    public int solution(String numbers) {
        int num=numbers.length();
        List<String> checkDuplicate = new ArrayList<String>();
        LinkedList<Integer> perArr = new LinkedList<Integer>();
        List<String> initList = Arrays.asList(numbers.split(""));
        int[] perCheck = new int[num];
        
        for(int i=1; i<num+1; i++){
            permutation(num, i, perArr, perCheck, initList, checkDuplicate);
        }
        return checkPrimeNum(checkDuplicate);
    }
    
    private static int checkPrimeNum(List<String> checkList){
        List<Integer> convertList = new ArrayList<Integer>();
        List<Integer> primeNum = new ArrayList<Integer>();
        
        for(String el:checkList){
            int convertVal = Integer.parseInt(el, 10);
            if(!convertList.contains(convertVal) 
              && convertVal!=0 && convertVal!=1){
                convertList.add(convertVal);
            }
        }
        
        for(int el: convertList){
            int count=0;
            double elSqrt = Math.sqrt(el);
            double checkZero = elSqrt - (int)elSqrt;
            if(checkZero!=0.0){
                //for(int i=1; i<el+1; i++){
                for(int i=1; i<(int)elSqrt+1; i++){
                    if(el%i==0){
                        count++;
                    }
                }
                count++;
                if(count==2){
                    primeNum.add(el);
                }
            }
        }
        return primeNum.size();
    }
    
    private static void permutation(int n, int r, LinkedList<Integer> perArr,
                                   int[] perCheck, List<String> initList,
                                   List<String> checkDuplicate){
        String checkStr = "";
        if(perArr.size()==r){
            for(int el: perArr){
                checkStr+=el;
                if(!checkDuplicate.contains(checkStr)){
                    checkDuplicate.add(checkStr);
                }
            }
            return;
        }
        
        for(int i=0; i<n; i++){
            if(perCheck[i]==0){
                perArr.add(Integer.parseInt(initList.get(i), 10));
                perCheck[i]=1;
                permutation(n, r, perArr, perCheck, initList, checkDuplicate);
                perCheck[i]=0;
                perArr.removeLast();
            }
        }
    }
}
cs

 

 

2. Solved with Python 2, Python 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
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
from itertools import permutations
from math import sqrt
 
def solution(numbers):
    return primeNum(numbers)
 
def primeNum(number):
    items = list(number)
    itemLen = len(items)+1
    setDuplicate = []
    
    for i in range(1, itemLen):
        check = set(permutations(items, i))
        for j in check:
            strs = ""
            for k in j:
                strs += k
            num = int(strs, 10)
            if num==0 or num==1:
                pass
            else:
                if num not in setDuplicate:
                    if primeCheck(num):
                        setDuplicate.append(num)
                    else:
                        pass
                else:
                    pass
    
    return len(setDuplicate)
 
def primeCheck(num):
    numSqrt = sqrt(num)
    checkSqrt = int(numSqrt)+1
    checkZero = numSqrt - int(numSqrt)
    count = 0
    if sqrtCheck(checkZero):
        for i in range(1, checkSqrt):
            if(num%i==0):
                count+=1
            else:
                pass
        count+=1
        if count==2:
            return True
        else:
            return False
    else:
        return False
 
def sqrtCheck(checkZero):
    if checkZero!=0.0:
        return True
    else:
        return False
cs

 

결과는 직접 확인해 보세요 ~!

 

 

 

+ Recent posts