잡다한 배똥월드

728x90
코딩 테스트 풀이 체크리스트
2시간 내에 풀었는가? O
본인의 실력으로 풀었는가? O

 

 

코딩테스트 연습 - 124 나라의 숫자

 

programmers.co.kr

 

 

 

 

 

class Solution {
    public String solution(int n) {
        String answer = "";
        String[] arr = {"1", "2", "4"};
        
        while (n > 0) {
            int temp = n - 1;
            int a = temp / 3;
            int b = temp % 3;
            
            answer = arr[b] + answer;
            
            n = a;
        }
        
        return answer.toString();
    }
}

 

정확성 테스트
테스트 1 통과 (1.16ms, 74.5MB)
테스트 2 통과 (1.58ms, 76.2MB)
테스트 3 통과 (1.56ms, 77.3MB)
테스트 4 통과 (1.73ms, 78.9MB)
테스트 5 통과 (1.11ms, 75.9MB)
테스트 6 통과 (1.10ms, 76.1MB)
테스트 7 통과 (1.29ms, 66.7MB)
테스트 8 통과 (1.33ms, 72.8MB)
테스트 9 통과 (1.25ms, 75.7MB)
테스트 10 통과 (1.06ms, 77.4MB)
테스트 11 통과 (1.26ms, 83.1MB)
테스트 12 통과 (1.28ms, 73.7MB)
테스트 13 통과 (1.16ms, 76.6MB)
테스트 14 통과 (1.15ms, 75.2MB)
효율성 테스트
테스트 1 통과 (1.51ms, 52.3MB)
테스트 2 통과 (1.85ms, 52.1MB)
테스트 3 통과 (0.92ms, 52.6MB)
테스트 4 통과 (1.44ms, 52.1MB)
테스트 5 통과 (1.49ms, 51.7MB)
테스트 6 통과 (1.40ms, 51.7MB)

 

 

 

 

 

n이 0이 될 때까지 3으로 나누고, 나머지는 숫자에 따라서 1이냐 2냐 4냐를 책정해서 answer에 추가

 

 

 

 

 

728x90
728x90
코딩 테스트 풀이 체크리스트
2시간 내에 풀었는가? O
본인의 실력으로 풀었는가? O

 

 

코딩테스트 연습 - 소수 만들기

주어진 숫자 중 3개의 수를 더했을 때 소수가 되는 경우의 개수를 구하려고 합니다. 숫자들이 들어있는 배열 nums가 매개변수로 주어질 때, nums에 있는 숫자들 중 서로 다른 3개를 골라 더했을 때

programmers.co.kr

 

 

 

 

 

class Solution {
    
    boolean[] check;
    int answer;
    
    public int solution(int[] nums) {
        answer = 0;
        
        check = new boolean[nums.length];
        
        func(nums, 0, 0, 0);

        return answer;
    }
    
    public void func(int[] arr, int num, int index, int position) {
        if (index == 3) {
            boolean value = true;
            
            for (int i = 2; i < num; i++) {
                if (num % i == 0) {
                    value = false;
                    break;
                }
            }
            
            if (value) answer++;
            
            return;
        }
        
        for (int i = position; i < arr.length; i++) {
            if (check[i]) continue;
            
            check[i] = true;
            func(arr, num+arr[i], index+1, i+1);
            check[i] = false;
        }
    }
}

 

테스트 1 통과 (0.62ms, 72MB)
테스트 2 통과 (0.79ms, 73.3MB)
테스트 3 통과 (0.28ms, 77.9MB)
테스트 4 통과 (0.21ms, 77.4MB)
테스트 5 통과 (0.99ms, 85.1MB)
테스트 6 통과 (3.21ms, 69.6MB)
테스트 7 통과 (0.28ms, 70.2MB)
테스트 8 통과 (6.34ms, 75.1MB)
테스트 9 통과 (0.78ms, 76.5MB)
테스트 10 통과 (5.25ms, 78.5MB)
테스트 11 통과 (0.07ms, 75.7MB)
테스트 12 통과 (0.04ms, 72.4MB)
테스트 13 통과 (0.06ms, 77.5MB)
테스트 14 통과 (0.05ms, 72.9MB)
테스트 15 통과 (0.03ms, 73.2MB)
테스트 16 통과 (13.90ms, 79.4MB)
테스트 17 통과 (0.63ms, 75.3MB)
테스트 18 통과 (0.45ms, 71.1MB)
테스트 19 통과 (0.06ms, 78.2MB)
테스트 20 통과 (15.36ms, 76.8MB)
테스트 21 통과 (14.37ms, 77.4MB)
테스트 22 통과 (0.49ms, 76MB)
테스트 23 통과 (0.02ms, 74.5MB)
테스트 24 통과 (12.59ms, 76.1MB)
테스트 25 통과 (12.55ms, 78.8MB)
테스트 26 통과 (0.02ms, 76.8MB)

 

 

 

 

 

DP인가..? 어쨋든 하나씩 다녀오면서 숫자 3개를 더했는지 확인하고 더했으면 소수인지 확인 후 계산

 

 

 

 

 

728x90
728x90
코딩 테스트 풀이 체크리스트
2시간 내에 풀었는가? O
본인의 실력으로 풀었는가? O

 

 

코딩테스트 연습 - 서울에서 김서방 찾기

String형 배열 seoul의 element중 "Kim"의 위치 x를 찾아, "김서방은 x에 있다"는 String을 반환하는 함수, solution을 완성하세요. seoul에 "Kim"은 오직 한 번만 나타나며 잘못된 값이 입력되는 경우는 없습니

programmers.co.kr

 

 

 

 

class Solution {
    fun solution(seoul: Array<String>): String {
        var num = seoul.indexOf("Kim");
        return "김서방은 " + num + "에 있다";
    }
}

 

테스트 1 통과 (18.97ms, 65.8MB)
테스트 2 통과 (19.75ms, 65MB)
테스트 3 통과 (19.17ms, 65.8MB)
테스트 4 통과 (19.95ms, 65.7MB)
테스트 5 통과 (19.57ms, 65.1MB)
테스트 6 통과 (18.98ms, 65.8MB)
테스트 7 통과 (19.75ms, 65.8MB)
테스트 8 통과 (20.21ms, 65.5MB)
테스트 9 통과 (19.09ms, 65.4MB)
테스트 10 통과 (19.77ms, 65.2MB)
테스트 11 통과 (19.13ms, 65.9MB)
테스트 12 통과 (20.01ms, 65.7MB)
테스트 13 통과 (19.70ms, 66.4MB)
테스트 14 통과 (19.53ms, 66.5MB)

 

 

 

 

indexOf( ) 로 배열 속 Kim이 있는 위치를 찾은 후 문자 그대로 작성해서 리턴하면 됨

 

 

 

 

 

728x90
728x90
코딩 테스트 풀이 체크리스트
2시간 내에 풀었는가? O
본인의 실력으로 풀었는가? O

 

 

코딩테스트 연습 - 수박수박수박수박수박수?

길이가 n이고, "수박수박수박수...."와 같은 패턴을 유지하는 문자열을 리턴하는 함수, solution을 완성하세요. 예를들어 n이 4이면 "수박수박"을 리턴하고 3이라면 "수박수"를 리턴하면 됩니다. 제한

programmers.co.kr

 

 

 

 

 

 

class Solution {
    fun solution(n: Int): String {
        var word = "수박";
        var answer = "";
        
        for (i in 1..n/2) {
            answer += word;
        }
        
        if (n % 2 == 1) {
            answer += "수";
        }
        
        return answer
    }
}​

 

테스트 1 통과 (2.63ms, 63.4MB)
테스트 2 통과 (6.95ms, 70.6MB)
테스트 3 통과 (4.13ms, 66.5MB)
테스트 4 통과 (10.90ms, 75.6MB)
테스트 5 통과 (4.88ms, 66.3MB)
테스트 6 통과 (1.94ms, 63.6MB)
테스트 7 통과 (1.81ms, 63.4MB)
테스트 8 통과 (2.06ms, 64.2MB)
테스트 9 통과 (1.40ms, 63.1MB)
테스트 10 통과 (1.32ms, 62.5MB)
테스트 11 통과 (1.33ms, 63.3MB)
테스트 12 통과 (1.27ms, 64.6MB)
테스트 13 통과 (2.02ms, 63.2MB)
테스트 14 통과 (1.41ms, 63.3MB)
테스트 15 통과 (27.58ms, 88.8MB)
테스트 16 통과 (2.05ms, 62.9MB)

 

 

 

 

2로 나눠서 몫만큼 수박을 반복하고, 마지막에 만약에 홀수(2로 나눴을 때 나머지가 1)면 마지막에 수 글자 추가하기.

 

 

 

 

 

728x90
728x90
코딩 테스트 풀이 체크리스트
2시간 내에 풀었는가? O
본인의 실력으로 풀었는가? O

 

 

코딩테스트 연습 - 문자열을 정수로 바꾸기

문자열 s를 숫자로 변환한 결과를 반환하는 함수, solution을 완성하세요. 제한 조건 s의 길이는 1 이상 5이하입니다. s의 맨앞에는 부호(+, -)가 올 수 있습니다. s는 부호와 숫자로만 이루어져있습니

programmers.co.kr

 

 

 

 

class Solution {
    fun solution(s: String): Int {
        return s.toInt();
    }
}

 

테스트 1 통과 (0.02ms, 63.1MB)
테스트 2 통과 (0.02ms, 63.1MB)
테스트 3 통과 (0.02ms, 63.6MB)
테스트 4 통과 (0.02ms, 63MB)
테스트 5 통과 (0.02ms, 63.4MB)
테스트 6 통과 (0.02ms, 63.1MB)
테스트 7 통과 (0.02ms, 65.2MB)
테스트 8 통과 (0.02ms, 61MB)
테스트 9 통과 (0.02ms, 63.7MB)
테스트 10 통과 (0.02ms, 63.2MB)
테스트 11 통과 (0.02ms, 63.4MB)
테스트 12 통과 (0.02ms, 63MB)
테스트 13 통과 (0.02ms, 65MB)
테스트 14 통과 (0.02ms, 63.4MB)
테스트 15 통과 (0.02ms, 64.5MB)

 

 

 

 

그냥 그대로 String을 Int형으로 바꾸기 위해서 toInt() 함수를 사용했다.

 

 

 

 

 

728x90
728x90
코딩 테스트 풀이 체크리스트
2시간 내에 풀었는가? O
본인의 실력으로 풀었는가? O

 

 

코딩테스트 연습 - 시저 암호

어떤 문장의 각 알파벳을 일정한 거리만큼 밀어서 다른 알파벳으로 바꾸는 암호화 방식을 시저 암호라고 합니다. 예를 들어 "AB"는 1만큼 밀면 "BC"가 되고, 3만큼 밀면 "DE"가 됩니다. "z"는 1만큼 밀

programmers.co.kr

 

 

 

 

 

class Solution {
    
    var alphabet = arrayOf("A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", "N", "O", "P", "Q", "R", "S", "T", "U", "V", "W", "X", "Y", "Z");
    
    fun solution(s: String, n: Int): String {        
        
        var arr = s.chunked(1);
        var answer = Array(arr.size){" "};
        
        for (i in 0..arr.size - 1) {
            if (arr[i] == " ") continue;
            
            var position = alphabet.indexOf(arr[i]);
            if (position == -1) {
                var word = arr[i].toUpperCase();
                position = alphabet.indexOf(word);
                
                answer[i] = alphabet[func(position + n)].toLowerCase();
            } else {
                answer[i] = alphabet[func(position + n)];
            }
        }
        
        return answer.joinToString("");
    }
    
    fun func(num: Int): Int {
        var n = 0;
        if (num >= 26) n = num - 26 else n = num
        return n;
    }
}

 

테스트 1 통과 (21.58ms, 66.3MB)
테스트 2 통과 (21.49ms, 66.2MB)
테스트 3 통과 (21.28ms, 66.7MB)
테스트 4 통과 (29.02ms, 65.7MB)
테스트 5 통과 (25.28ms, 66.4MB)
테스트 6 통과 (26.19ms, 66.3MB)
테스트 7 통과 (21.73ms, 66.2MB)
테스트 8 통과 (22.64ms, 66MB)
테스트 9 통과 (21.39ms, 66.3MB)
테스트 10 통과 (22.76ms, 66.4MB)
테스트 11 통과 (23.57ms, 66MB)
테스트 12 통과 (21.94ms, 66.2MB)
테스트 13 통과 (28.62ms, 67.4MB)

 

 

 

 

 

for문 안의 if문의 숫자 계산은 비슷해서 비슷한 부분은 따로 함수 선언해서 만들었음.

그래서 소문자면 대문자로 바꿔서 alphabet 배열의 위치랑 파악한 후 다시 소문자로 변환

대문자는 그대로 위치만 이동

 

 

 

 

 

728x90
728x90
코딩 테스트 풀이 체크리스트
2시간 내에 풀었는가? O
본인의 실력으로 풀었는가? O

 

 

코딩테스트 연습 - 약수의 합

정수 n을 입력받아 n의 약수를 모두 더한 값을 리턴하는 함수, solution을 완성해주세요. 제한 사항 n은 0 이상 3000이하인 정수입니다. 입출력 예 n return 12 28 5 6 입출력 예 설명 입출력 예 #1 12의 약수

programmers.co.kr

 

 

 

 

 

class Solution {
    fun solution(n: Int): Int {
        var answer = 0
       	var arr = IntArray(n+1){0};
        
        for (i in 1..n) {
            if (arr[i] != 0) continue;
        
            if (n % i == 0) {
                arr[i] = 1;
                arr[n / i] = 1;
            }
        }
        
        for (i in 1..n) {
            if (arr[i] == 1) answer += i;
        }
        
        return answer
    }
}

 

테스트 1 통과 (0.01ms, 64MB)
테스트 2 통과 (0.01ms, 64.8MB)
테스트 3 통과 (0.06ms, 64.2MB)
테스트 4 통과 (0.03ms, 64.1MB)
테스트 5 통과 (0.09ms, 63.5MB)
테스트 6 통과 (0.05ms, 65.6MB)
테스트 7 통과 (0.14ms, 63.3MB)
테스트 8 통과 (0.04ms, 63.8MB)
테스트 9 통과 (0.20ms, 62.2MB)
테스트 10 통과 (0.15ms, 63.8MB)
테스트 11 통과 (0.11ms, 63.7MB)
테스트 12 통과 (0.13ms, 63.4MB)
테스트 13 통과 (0.02ms, 64.3MB)
테스트 14 통과 (0.12ms, 63.2MB)
테스트 15 통과 (0.12ms, 63.1MB)
테스트 16 통과 (0.01ms, 63.2MB)
테스트 17 통과 (0.16ms, 62.7MB)

 

 

 

 

숫자로 나눠서 나머지가 0인 숫자와 그 몫을 더해주면 됨.

 

 

 

 

 

728x90
728x90
코딩 테스트 풀이 체크리스트
2시간 내에 풀었는가? O
본인의 실력으로 풀었는가? O

 

 

코딩테스트 연습 - 이상한 문자 만들기

문자열 s는 한 개 이상의 단어로 구성되어 있습니다. 각 단어는 하나 이상의 공백문자로 구분되어 있습니다. 각 단어의 짝수번째 알파벳은 대문자로, 홀수번째 알파벳은 소문자로 바꾼 문자열을

programmers.co.kr

 

 

 

 

 

class Solution {
    fun solution(s: String): String {
        var sArr = s.split(" ");
        
        var arr = Array(s.length){" "};
        var index = 0;
        
        for (i in 0..sArr.size - 1) {
            
            var temp = sArr[i].chunked(1);
            
            for (j in 0..temp.size-1) {
                if (j % 2 == 0) {
                    arr[index] = temp[j].toUpperCase();
                } else {
                    arr[index] = temp[j].toLowerCase();
                } 
                index++;
            }
            index++;
        }
        
        return arr.joinToString("");
    }
}

 

테스트 1 통과 (31.59ms, 66MB)
테스트 2 통과 (25.66ms, 66.9MB)
테스트 3 통과 (27.06ms, 66.1MB)
테스트 4 통과 (23.21ms, 65.7MB)
테스트 5 통과 (22.37ms, 66.6MB)
테스트 6 통과 (38.35ms, 66.7MB)
테스트 7 통과 (24.62ms, 66.2MB)
테스트 8 통과 (24.78ms, 66.7MB)
테스트 9 통과 (23.24ms, 66MB)
테스트 10 통과 (21.49ms, 65.9MB)
테스트 11 통과 (28.37ms, 66.2MB)
테스트 12 통과 (22.27ms, 65.8MB)
테스트 13 통과 (23.00ms, 66.3MB)
테스트 14 통과 (22.61ms, 66.3MB)
테스트 15 통과 (22.75ms, 65.9MB)
테스트 16 통과 (22.29ms, 66.1MB)

 

 

 

 

 

코틀린은 정말 하면 할수록 모르겠음

일단 Array()로 배열 선언을 하려면 무조건 내용이 필요함.

 그래서 {" "}로 내용을 채웠고,

각 단어들을 나누기 위해서 split()을 이용하여 띄어쓰기 기준으로 배열을 만들었고

각 단어들을 한 자리로 나누기 위해서 chunked(1)로 또 나누었음

그래서 짝수 자리는 대문자, 홀수 자리는 소문자로 해서 하나씩 넣었고

마지막에 joinToString()으로 배열을 합쳐서 리턴함

 

 

 

 

 

728x90

+ Recent posts