반응형

문제 설명

 

정수 배열 arr와 2개의 구간이 담긴 배열 intervals가 주어집니다. intervals는 항상 [[a1, b1], [a2, b2]]의 꼴로 주어지며 각 구간은 닫힌 구간입니다. 닫힌 구간은 양 끝값과 그 사이의 값을 모두 포함하는 구간을 의미합니다. 이때 배열 arr의 첫 번째 구간에 해당하는 배열과 두 번째 구간에 해당하는 배열을 앞뒤로 붙여 새로운 배열을 만들어 return 하는 solution 함수를 완성해 주세요.


제한사항

 

1 ≤ arr의 길이 ≤ 100,000

1 ≤ arr의 원소 < 100

1 ≤ a1  b1 < arr의 길이

1 ≤ a2  b2 < arr의 길이


입출력 예

 

arr intervals result
[1, 2, 3, 4, 5] [[1, 3], [0, 4]] [2, 3, 4, 1, 2, 3, 4, 5]

입출력 예 설명

 

입출력 예 #1

첫 번째 구간에 해당하는 배열은 [2, 3, 4] 입니다.

두 번째 구간에 해당하는 배열은 [1, 2, 3, 4, 5] 입니다.

따라서 이 두 배열을 앞뒤로 붙인 배열인 [2, 3, 4, 1, 2, 3, 4, 5]를 return 합니다.


문제 풀이

 

-> answer 배열의 길이를 구해서 미리 초기화 해두고, 반복문을 통해서 intervals 값을 가지고 arr 값들을 빼내어 result를 구한다.


코드

 

class Solution {
    public int[] solution(int[] arr, int[][] intervals) {
        int[] answer = {};
        int length = intervals[0][1]-intervals[0][0]+1+intervals[1][1]-intervals[1][0]+1;
        answer = new int[length];
        int index = 0;
        for(int i=0;i<2;i++){
            for(int j=intervals[i][0];j<intervals[i][1]+1;j++){
                answer[index] = arr[j];
                index++;
            }
        }
        return answer;
    }
}
반응형
반응형

문제 설명

정수 리스트 num_list가 주어질 때, 첫 번째로 나오는 음수의 인덱스를 return하도록 solution 함수를 완성해주세요. 음수가 없다면 -1을 return합니다.


제한사항

5 ≤ num_list의 길이 ≤ 100
-10 ≤ num_list의 원소 ≤ 100


입출력 예

 

num_list  result
[12, 4, 15, 46, 38, -2, 15] 5
[13, 22, 53, 24, 15, 6] -1

 


입출력 예 설명

입출력 예 #1
5번 인덱스에서 음수가 처음 등장하므로 5를 return합니다.

입출력 예 #2
음수가 없으므로 -1을 return합니다.


풀이

-> 반복문을 통해서 처음 음수가 나오면 해당 index값을 answer에 넣어주고, break문을 통해 반복을 멈춘다. answer값은 초기값을 -1로 하여 음수가 없을 경우 -1을 리턴한다.


class Solution {
    public int solution(int[] num_list) {
        int answer = -1;
        for(int i=0;i<num_list.length;i++){
            if(num_list[i]<0){
                answer = i;
                break;
            }
        }
        return answer;
    }
}
반응형
반응형

문제 설명

 

정수 n과 정수 3개가 담긴 리스트 slicer 그리고 정수 여러 개가 담긴 리스트 num_list가 주어집니다. slicer에 담긴 정수를 차례대로 a, b, c라고 할 때, n에 따라 다음과 같이 num_list를 슬라이싱 하려고 합니다.

 

n = 1 : num_list의 0번 인덱스부터 b번 인덱스까지

n = 2 : num_list의 a번 인덱스부터 마지막 인덱스까지

n = 3 : num_list의 a번 인덱스부터 b번 인덱스까지

n = 4 : num_list의 a번 인덱스부터 b번 인덱스까지 c 간격으로

올바르게 슬라이싱한 리스트를 return하도록 solution 함수를 완성해주세요.


제한사항

 

n 은 1, 2, 3, 4 중 하나입니다.

slicer의 길이 = 3

slicer에 담긴 정수를 차례대로 a, b, c라고 할 때

  • 0 ≤ a ≤ b ≤ num_list의 길이 - 1
  • 1 ≤ c ≤ 3

5 ≤ num_list의 길이 ≤ 30

0 ≤ num_list의 원소 ≤ 100


입출력 예

 

n slicer num_list result
3 [1,5,2] [1,2,3,4,5,6,7,8,9] [2,3,4,5,6]
4 [1,5,2] [1,2,3,4,5,6,7,8,9] [2,4,6]

입출력 예 설명

 

입출력 예 #1

[1, 2, 3, 4, 5, 6, 7, 8, 9]에서 1번 인덱스부터 5번 인덱스까지 자른 리스트는 [2, 3, 4, 5, 6]입니다.

 

입출력 예 #2

[1, 2, 3, 4, 5, 6, 7, 8, 9]에서 1번 인덱스부터 5번 인덱스까지 2개 간격으로 자른 리스트는 [2, 4, 6]입니다.


풀이

 

-> 조건문으로 n 값이 1,2,3,4 일 때로 나누고, n=4일 경우 slicer[1]-slicer[0]값이 홀수일 때와 짝수일 때를 나누어 계산한다.


class Solution {
    public int[] solution(int n, int[] slicer, int[] num_list) {
        int[] answer = {};
        if(n==1){
            answer = new int[slicer[1]+1];
            for(int i=0; i<slicer[1]+1;i++){
                answer[i]=num_list[i];
            }
        } else if(n==2){
            answer = new int[num_list.length-slicer[0]];
            for(int i=0; i<num_list.length-slicer[0]; i++){
                answer[i]=num_list[slicer[0]+i];
            }
        } else if(n==3){
            answer = new int[slicer[1]-slicer[0]+1];
            for(int i=0; i<slicer[1]-slicer[0]+1;i++){
                answer[i]=num_list[slicer[0]+i];
            }
        } else if(n==4){
            if((slicer[1]-slicer[0])%2==0){
                answer = new int[(slicer[1]-slicer[0])/2+1];
                for(int i=0; i<answer.length;i++){
                    answer[i]=num_list[slicer[0]+2*i];
                }
            } else if((slicer[1]-slicer[0])%2==1){
                answer = new int[(slicer[1]-slicer[0])/2+1];
                for(int i=0; i<answer.length; i++){
                    answer[i]=num_list[slicer[0]+2*i];
                }
            }
        }
        return answer;
    }
}
반응형
반응형

문제 설명

 

정수 배열 arr가 주어집니다. 이때 arr의 원소는 1 또는 0입니다. 정수 idx가 주어졌을 때, idx보다 크면서 배열의 값이 1인 가장 작은 인덱스를 찾아서 반환하는 solution 함수를 완성해 주세요. 단, 만약 그러한 인덱스가 없다면 -1을 반환합니다.


제한사항

 

3 ≤ arr의 길이 ≤ 100'000

arr의 원소는 전부 1 또는 0입니다.


입출력 예

 

arr idx result
[0,0,0,1] 1 3
[0,0,0,1,0,0] 4 -1
[1,1,1,1,0] 3 3

입출력 예 설명

 

입출력 예 #1

1보다 크면서 원소가 1인 가장 작은 인덱스는 3입니다. 따라서 3을 return 합니다.

 

입출력 예 #2

4번 인덱스 이후에 1은 등장하지 않습니다. 따라서 -1을 return 합니다.

 

입출력 예 #3

3번 인덱스의 값이 1입니다. 따라서 3을 return 합니다.


풀이

 

-> idx값부터 arr의 length만큼 반복문을 돌려서 1이 있는지 확인하고 확인되면 break문을 통해 for문을 빠져나간다.


코드

 

class Solution {
    public int solution(int[] arr, int idx) {
        int answer = 0;
        for(int i=idx;i<arr.length;i++){
            if(arr[i]==1){
                answer = i;
                break;
            } else {
                answer = -1;
            }
        }
        return answer;
    }
}
반응형
반응형

문제 설명

 

정수 start_num와 end_num가 주어질 때, start_num에서 end_num까지 1씩 감소하는 수들을 차례로 담은 리스트를 return하도록 solution 함수를 완성해주세요.


제한사항

 

0 ≤ end_num  start_num ≤ 50


입출력 예

 

start end_num result
10 3 [10,9,8,7,6,5,4,3]

입출력 예 설명

 

입출력 예 #1

10부터 3까지 1씩 감소하는 수를 담은 리스트는 [10, 9, 8, 7, 6, 5, 4, 3]입니다.


풀이

 

-> start와 end_num의 차이로 length를 정해두고 반복문을 돌려서 start값부터 1씩 감소하면서 answer배열에 담는다.


코드

 

class Solution {
    public int[] solution(int start, int end_num) {
        int[] answer = {};
        int length = start - end_num + 1;
        answer = new int[length];
        for(int i=0;i<length;i++){
            answer[i]=start--;
        }
        return answer;
    }
}
반응형
반응형

문제 설명

 

문자열 my_string과 정수 배열 indices가 주어질 때, my_string에서 indices의 원소에 해당하는 인덱스의 글자를 지우고 이어 붙인 문자열을 return 하는 solution 함수를 작성해 주세요.


제한사항

 

1 ≤ indices의 길이 < my_string의 길이 ≤ 100

my_string은 영소문자로만 이루어져 있습니다

0 ≤ indices의 원소 < my_string의 길이

indices의 원소는 모두 서로 다릅니다.


입출력 예

 

my_string indices result
"apporoograpemmemprs" [1, 16, 6, 15, 0, 10, 11, 3] "programmers"

입출력 예 설명

 

입출력 예 #1

예제 1번의 my_string의 인덱스가 잘 보이도록 표를 만들면 다음과 같습니다.

index 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
my_string a p p o r o o g r a p e m m e m p r s

indices에 있는 인덱스의 글자들을 지우고 이어붙이면 "programmers"가 되므로 이를 return 합니다.

 


풀이

 

-> indices를 내림차순으로 정렬 한 후에 substring을 통해 my_string에서 잘라할 문자의 앞부분과 뒷부분을 더한다. 반복문을 통해 이 작업을 반복하여 잘라낼 문자를 잘라낸다. 주의할 점은 indices가 0일 때는 substring이 1부터 시작할 수 있도록 해준다.

 


import java.util.*;
class Solution {
    public String solution(String my_string, int[] indices) {
        String answer = "";
        
        Arrays.sort(indices);
        for(int i=0; i<indices.length/2; i++){
            int temp = indices[i];
            indices[i] = indices[indices.length - 1 - i];
            indices[indices.length - 1 - i] = temp;
        }
        
        for(int i=0; i<indices.length; i++){
            if(indices[i]!=0){
                my_string = my_string.substring(0,indices[i])+my_string.substring(indices[i]+1);
            } else {
                my_string = my_string.substring(indices[i]+1);
            }
        }
        answer = my_string;
        return answer;
    }
}
반응형
반응형

문제 설명

정수 n과 k가 주어졌을 때, 1 이상 n이하의 정수 중에서 k의 배수를 오름차순으로 저장한 배열을 return 하는 solution 함수를 완성해 주세요.


제한사항

 

1 ≤ n ≤ 1,000,000

1 ≤ k ≤ min(1,000, n)


입출력 예

n k result
10 3 [3,6,9]
15 5 [5,10,15]

입출력 예 설명

입출력 예 #1

1 이상 10 이하의 3의 배수는 3, 6, 9 이므로 [3, 6, 9]를 return 합니다.

 

입출력 예 #2

1 이상 15 이하의 5의 배수는 5, 10, 15 이므로 [5, 10, 15]를 return 합니다.


풀이

-> n을 k로 나눈 몫 크기의 answer 배열을 선언하고, 반복문을 통해 i를 1부터 n까지 돌리며 k로 나눈 나머지가 0인 k의 배수를 찾아 answer 배열에 담아준다. 이 때, count라는 변수를 0으로 놓고 조건문이 돌면 answer의 index값으로 사용하고 1씩 증가시켜준다.


코드

class Solution {
    public int[] solution(int n, int k) {
        int[] answer = new int[n/k];
        int count = 0;
        for(int i=1;i<=n;i++){
            if(i%k==0){
                answer[count]=i;
                count++;
            }
        }
        return answer;
    }
}
반응형
반응형

문제 설명

 

알파벳 대소문자로만 이루어진 문자열 my_string이 주어질 때, my_string에서 'A'의 개수, my_string에서 'B'의 개수,..., my_string에서 'Z'의 개수, my_string에서 'a'의 개수, my_string에서 'b'의 개수,..., my_string에서 'z'의 개수를 순서대로 담은 길이 52의 정수 배열을 return 하는 solution 함수를 작성해 주세요.


제한사항

 

1 ≤ my_string의 길이 ≤ 1,000


입출력 예

 

my_string result
"Programmers" [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 2, 0, 1, 0, 0, 3, 1, 0, 0, 0, 0, 0, 0, 0]

입출력 예 설명

 

입출력 예 #1

예제 1번의 my_string에서 'P'가 1개, 'a'가 1개, 'e'가 1개, 'g'가 1개, 'm'이 2개, 'o'가 1개, 'r'가 3개, 's'가 1개 있으므로 [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 2, 0, 1, 0, 0, 3, 1, 0, 0, 0, 0, 0, 0, 0]를 return 합니다.


풀이

 

-> 알파벳 a-z, A-Z의 갯수가 52개이다. 해당 개수만큼 answer을 초기화시켜준다. 그 후에 대소문자를 구분해서 해당 배열의 index를 잡아서 1씩 증가시켜준다. 여기서 a-z와 A-Z 사이에 다른 문자도 있다는 것을 몰라서 한번에 처리하려다 헤맸다. 기억해두도록 하자.

 

알파벳은 65부터 90까지의 숫자로, 소문자 알파벳은 97부터 122까지의 숫자로 표현


코드

 

class Solution {
    public int[] solution(String my_string) {
        int length = my_string.length();
        int[] answer = new int[52];
        
        for (int i = 0; i < length; i++) {
            char c = my_string.charAt(i);
            if (c >= 'A' && c <= 'Z') {
                // 대문자 알파벳인 경우
                answer[c - 'A']++;
            } else if (c >= 'a' && c <= 'z') {
                // 소문자 알파벳인 경우
                answer[c - 'a' + 26]++;
            }
        }
        
        return answer;
    }
}
반응형

+ Recent posts