반응형

문제 설명

 

랜덤으로 서로 다른 k개의 수를 저장한 배열을 만드려고 합니다. 적절한 방법이 떠오르지 않기 때문에 일정한 범위 내에서 무작위로 수를 뽑은 후, 지금까지 나온적이 없는 수이면 배열 맨 뒤에 추가하는 방식으로 만들기로 합니다.

이미 어떤 수가 무작위로 주어질지 알고 있다고 가정하고, 실제 만들어질 길이 k의 배열을 예상해봅시다.

정수 배열 arr가 주어집니다. 문제에서의 무작위의 수는 arr에 저장된 순서대로 주어질 예정이라고 했을 때, 완성될 배열을 return 하는 solution 함수를 완성해 주세요.

단, 완성될 배열의 길이가 k보다 작으면 나머지 값을 전부 -1로 채워서 return 합니다.


제한사항

 

1 ≤ arr의 길이 ≤ 100,000

  • 0 ≤ arr의 원소 ≤ 100,000

1 ≤ k ≤ 1,000


입출력 예

 

arr k result
[0,1,1,2,2,3] 3 [0,1,2]
[0,1,1,1,1] 4 [0,1,-1,-1]

입출력 예 설명

 

입출력 예 #1

앞에서부터 서로 다른 k개의 수를 골라내면 [0, 1, 2]가 됩니다. 따라서 [0, 1, 2]를 return 합니다.

 

입출력 예 #2

서로 다른 수의 개수가 2개 뿐이므로 서로 다른 수들을 앞에서부터 차례대로 저장한 [0, 1]에서 이후 2개의 인덱스를 -1로 채워넣은 [0, 1, -1, -1]을 return 합니다.


풀이

 

-> 동적으로 배열을 담기 위해 우선 ArrayList를 사용하였다. answer의 크기는 k로 초기화하였고, -1값을 기본적으로 담아두었다. 그 다음 ArrayList인 temp를 선언하여 temp에 arr[i] 값이 없으면 추가하였다. temp에 값을 다 추가한 후에 temp의 size가 큰지, k 값이 큰지 삼항연산자를 통해 비교하여 answer에 temp값을 담는 for문에 사용하였다. 그런 후에 return~


코드

 

import java.util.*;
class Solution {
    public int[] solution(int[] arr, int k) {
        int[] answer = {};
        answer = new int[k];
        for(int i=0;i<k;i++){
            answer[i]=-1;
        }
        
        ArrayList<Integer> temp = new ArrayList<>();
        for(int i=0;i<arr.length;i++){
            if(!temp.contains(arr[i])){
                temp.add(arr[i]);
            }
        }
        
        int n = temp.size()>k?k:temp.size();
        
        for(int i=0;i<n;i++){
           answer[i]=temp.get(i);
        }
        return answer;
    }
}
반응형
반응형

문제 설명

 

문자 "A"와 "B"로 이루어진 문자열 myString과 pat가 주어집니다. myString의 "A"를 "B"로, "B"를 "A"로 바꾼 문자열의 연속하는 부분 문자열 중 pat이 있으면 1을 아니면 0을 return 하는 solution 함수를 완성하세요.

 


제한사항

 

1 ≤ myString의 길이 ≤ 100

1 ≤ pat의 길이 ≤ 10

myString과 pat는 문자 "A"와 "B"로만 이루어진 문자열입니다.


입출력 예

 

myString pat result
"ABBAA" "AABB" 1
"ABAB" "ABAB" 0

입출력 예 설명

 

입출력 예 #1

"ABBAA"에서 "A"와 "B"를 서로 바꾸면 "BAABB"입니다. 여기에는 부분문자열 "AABB"가 있기 때문에 1을 return 합니다.

 

입출력 예 #2

"ABAB"에서 "A"와 "B"를 서로 바꾸면 "BABA"입니다. 여기에는 부분문자열 "BABA"가 없기 때문에 0을 return 합니다.

※ 2023년 05월 15일 제한사항 및 테스트 케이스가 수정되었습니다. 기존에 제출한 코드가 통과하지 못할 수 있습니다.


풀이

 

-> 먼저 반복문을 통해서 myString을 변환한다. temp라는 변수를 만들어 변환한 문자열을 담아준다. 그리고 java.util.*을 import해준 후에 contains 함수를 통해서 pat에 해당하는 문자열이 temp에 포함되고 있는지를 확인한다.


코드

 

import java.util.*;
class Solution {
    public int solution(String myString, String pat) {
        int answer = 0;
        String temp = "";
        for(int i=0; i<myString.length();i++){
            temp+=myString.charAt(i)=='A'?"B":"A";
        }
        
        if(temp.contains(pat)){
            answer = 1;
        }
        
        return answer;
    }
}
반응형
반응형

문제 설명

 

문자열 myString이 주어집니다. myString에서 알파벳 "a"가 등장하면 전부 "A"로 변환하고, "A"가 아닌 모든 대문자 알파벳은 소문자 알파벳으로 변환하여 return 하는 solution 함수를 완성하세요.


제한사항

 

1 ≤ myString의 길이 ≤ 20

  • myString은 알파벳으로 이루어진 문자열입니다.

입출력 예

 

myString result
"abstract algebra" "AbstrAct AlgebrA"
"PrOgRaMmErS" "progrAmmers"

입출력 예 설명

 

입출력 예 #1

0번, 5번, 9번, 15번 인덱스의 "a"는 소문자이므로 전부 대문자로 고쳐줍니다.

다른 문자들은 전부 "a"가 아닌 소문자이므로 바꾸지 않습니다.

따라서 "AbstrAct AlgebrA"를 return 합니다.

 

입출력 예 #2

0번, 2번, 4번, 6번, 8번, 10번 인덱스의 문자들은 "A"가 아닌 대문자이므로 전부 소문자로 고쳐줍니다.

5번 인덱스의 "a"는 소문자이므로 대문자로 고쳐줍니다.

다른 문자들은 전부 "a"가 아닌 소문자이므로 바꾸지 않습니다.

따라서 "progrAmmers"를 return 합니다.


풀이

 

-> 문자열을 array로 변환했다가 다시 문자열로 합치는 부분을 한번 정리하고 싶어서 작성했다.


코드

 

class Solution {
    public String solution(String myString) {
        String answer = "";
        char[] charArray = myString.toCharArray();
        
        for(int i=0;i<charArray.length;i++){
            if(charArray[i]=='a'||charArray[i]=='A'){
                charArray[i]=Character.toUpperCase(charArray[i]);
            } else {
                charArray[i]=Character.toLowerCase(charArray[i]);
            }
        }
        
        answer = new String(charArray);
        return answer;
    }
}
반응형
반응형

문제 설명

 

정수 배열 arr가 주어집니다. arr의 각 원소에 대해 값이 50보다 크거나 같은 짝수라면 2로 나누고, 50보다 작은 홀수라면 2를 곱하고 다시 1을 더합니다.

이러한 작업을 x번 반복한 결과인 배열을 arr(x)라고 표현했을 때, arr(x) = arr(x + 1)인 x가 항상 존재합니다. 이러한 x 중 가장 작은 값을 return 하는 solution 함수를 완성해 주세요.

단, 두 배열에 대한 "="는 두 배열의 크기가 서로 같으며, 같은 인덱스의 원소가 각각 서로 같음을 의미합니다


제한사항

 

1 ≤ arr의 길이 ≤ 1,000,000

  • 1 ≤ arr의 원소의 값 ≤ 100

입출력 예

 

arr result
[1,2,3,100,99,98] 5

입출력 예 설명

 

입출력 예 #1

위 작업을 반복하면 다음과 같이 arr가 변합니다.

반복 횟수 arr
0 [1,2,3,100,99,98]
1 [3,2,7,50,99,49]
2 [7,2,15,25,99,99]
3 [15,2,31,51,99,99]
4 [31,2,63,51,99,99]
5 [63,2,63,51,99,99]
6 [63,2,63,51,99,99]

 

이후로 arr가 변하지 않으며, arr(5) = arr(6)이므로 5를 return 합니다.


풀이 

 

-> 먼저 배열의 이전 기록을 담을 temp 배열을 만들어준다. temp에 arr를 넣어주고 arr는 위의 규칙에 맞게 작업해준다. 작업이 완료된 후 temp의 각 요소와 arr의 각 요소가 모두 같은지 비교한다. 이 때, count라는 변수를 0으로 초기화해두고 하나라도 다르면 count++을 해준다. count가 0이 아니면 answer도 증가시킨다. count가 0일 때의 answer값은 마지막 작업이 완료된 후이므로 해당 answer보다 1단계 전단계인 값이 답이 된다. 따라서 answer-1을 return한다.


코드

 

import java.util.*;
class Solution {
    public int solution(int[] arr) {
        int answer = 0;
        boolean ending = false;
       while(!ending){
           int count = 0;
           
            int[] temp = new int[arr.length];
            for(int i=0;i<arr.length;i++){
                temp[i]=arr[i];
            }
            for(int i=0;i<arr.length;i++){
                if(arr[i]>=50&&arr[i]%2==0){
                    arr[i]=arr[i]/2;
                } else if(arr[i]<50&&arr[i]%2==1) {
                    arr[i]=arr[i]*2+1;
                }
            }
            for(int i=0;i<arr.length;i++){
                if(temp[i]!=arr[i]){
                    count++;
                }
            }
            if(count==0){
                ending = true;
            }
            answer++;
        }
        return answer-1;
    }
}
반응형
반응형

문제 설명

 

1부터 6까지 숫자가 적힌 주사위가 두 개 있습니다. 두 주사위를 굴렸을 때 나온 숫자를 각각 a, b라고 했을 때 얻는 점수는 다음과 같습니다.

a와 b가 모두 홀수라면 a2 + b2 점을 얻습니다.

a와 b 중 하나만 홀수라면 2 × (a + b) 점을 얻습니다.

a와 b 모두 홀수가 아니라면 |a - b| 점을 얻습니다.

정수 a와 b가 매개변수로 주어질 때, 얻는 점수를 return 하는 solution 함수를 작성해 주세요.


제한사항

 

a와 b는 1 이상 6 이하의 정수입니다.


입출력 예

 

a b result
3 5 34
6 1 14
2 4 2

입출력 예 설명

 

입출력 예 #1

예제 1번에서 두 주사위 숫자가 모두 홀수이므로 32 + 52 = 9 + 25 = 34점을 얻습니다. 따라서 34를 return 합니다.

 

입출력 예 #2

예제 2번에서 두 주사위 숫자 중 하나만 홀수이므로 2 × (6 + 1) = 2 × 7 = 14점을 얻습니다. 따라서 14를 return 합니다.

 

입출력 예 #3

예제 3번에서 두 주사위 숫자가 모두 홀수가 아니므로 |2 - 4| = |-2| = 2점을 얻습니다. 따라서 2를 return 합니다.


풀이

 

-> 간단한 문제이지만 아주 조금은 생각하게 만드는 문제라 작성해보았다. 두 수 중 하나만 홀수일 때는 언제인가? 라고 생각해보면 바로 떠오르지 않는 분들도 있을 거다. 두 수 중 하나만 홀수이면 두 수를 더했을 때, 홀수가 된다!


코드

 

class Solution {
    public int solution(int a, int b) {
        int answer = 0;
        if(a%2==0&&b%2==0){
            if(a-b>=0){
                answer = a-b;
            } else {
                answer = (-1)*(a-b);
            } 
        }else if((a+b)%2==1){
            answer = 2*(a+b);
        } else if(a%2==1&&b%2==1) {
            answer = (a*a)+(b*b);        
        }
        
        return answer;
    }
}
반응형
반응형

문제 설명

 

정수 배열 arr와 2차원 정수 배열 queries이 주어집니다. queries의 원소는 각각 하나의 query를 나타내며, [s, e] 꼴입니다.

 query마다 순서대로 s  i  e인 모든 i에 대해 arr[i]에 1을 더합니다.

위 규칙에 따라 queries를 처리한 이후의 arr를 return 하는 solution 함수를 완성해 주세요.


제한사항

1 ≤ arr의 길이 ≤ 1,000

  • 0 ≤ arr의 원소 ≤ 1,000,000

1 ≤ queries의 길이 ≤ 1,000

  • 0 ≤ s  e < arr의 길이

입출력 예

 

arr queries result
[0,1,2,3,4] [[0,1],[1,2],[2,3]] [1,3,4,4,4]

입출력 예 설명

 

입출력 예 #1

각 쿼리에 따라 arr가 다음과 같이 변합니다.

i queries[i] arr
    [0,1,2,3,4]
0 [0,1] [1,2,2,3,4]
1 [1,2] [1,3,3,3,4]
2 [2,3] [1,3,4,4,4]

 

따라서 [1, 3, 4, 4, 4]를 return 합니다.


풀이

 

-> arr배열을 반복문을 통해 queries의 길이 만큼 반복해서 arr배열에서  queries의 값에 해당하는 index를 찾아 들어있는 값을 1씩 증가시켜준다. 그 다음 answer 배열에 담아서 결과를 return한다.


코드

 

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

문제 설명

 

정수 배열 numbers와 정수 n이 매개변수로 주어집니다. numbers의 원소를 앞에서부터 하나씩 더하다가 그 합이 n보다 커지는 순간 이때까지 더했던 원소들의 합을 return 하는 solution 함수를 작성해 주세요.


제한사항

 

1 ≤ numbers의 길이 ≤ 100

1 ≤ numbers의 원소 ≤ 100

0 ≤ n < numbers의 모든 원소의 합


입출력 예

 

numbers n result
[34, 5, 71, 29, 100, 34] 123 139
[58, 44, 27, 10, 100] 139 239

입출력 예 설명

 

입출력 예 #1

예제 1번의 numbers를 문제 설명대로 더해가는 과정을 나타내면 다음의 표와 같습니다.

i numbers[i] sum
    0
0 34 34
1 5 39
2 71 110
3 29 139

 

29를 더한 뒤에 sum 값은 139이고 n 값인 123보다 크므로 139를 return 합니다.

예제 2번의 numbers의 마지막 원소 전까지의 원소를 sum에 더하면 139입니다. 139는 n 값인 139보다 크지 않고 마지막 원소인 100을 더하면 139보다 커지므로 239를 return 합니다.


풀이

 

-> 반복문을 통해서 answer값이 n보다 커질때까지 더한다.


코드

 

class Solution {
    public int solution(int[] numbers, int n) {
        int answer = 0;
        for(int i=0;i<numbers.length;i++){
            answer += numbers[i];
            if(answer>n){
                break;
            }
        }
        return answer;
    }
}
반응형
반응형

문제 설명

 

늘 해야 할 일이 담긴 문자열 배열 todo_list와 각각의 일을 지금 마쳤는지를 나타내는 boolean 배열 finished가 매개변수로 주어질 때, todo_list에서 아직 마치지 못한 일들을 순서대로 담은 문자열 배열을 return 하는 solution 함수를 작성해 주세요.


제한사항

 

1 ≤ todo_list의 길이 1 ≤ 100

2 ≤ todo_list의 원소의 길이 ≤ 20

  • todo_list의 원소는 영소문자로만 이루어져 있습니다.
  • todo_list의 원소는 모두 서로 다릅니다.

finished[i]는 true 또는 false이고 true는 todo_list[i]를 마쳤음을, false는 아직 마치지 못했음을 나타냅니다.

아직 마치지 못한 일이 적어도 하나 있습니다.


입출력 예

 

to_do_list finished result
["problemsolving", "practiceguitar", "swim", "studygraph"] [true, false, true, false] ["practiceguitar", "studygraph"]

입출력 예 설명

 

입출력 예 #1

예제 1번의 todo_list 중에서 "problemsolving"과 "swim"은 마쳤고, "practiceguitar"와 "studygraph"는 아직 마치지 못했으므로 todo_list에서 나온 순서대로 담은 문자열 배열 ["practiceguitar", "studygraph"]를 return 합니다.


풀이

 

-> arrayList를 선언해서 반복문을 통해 finished가 false인 것만 담은후 다시 answer에 반복문을 통해 담으면 간단하게 해결!


코드

 

import java.util.*;
class Solution {
    public String[] solution(String[] todo_list, boolean[] finished) {
        String[] answer = {};
        ArrayList<String> temp = new ArrayList<>();
        for(int i=0;i<todo_list.length;i++){
            if(finished[i]==false){
                temp.add(todo_list[i]);
            }
        }
        answer = new String[temp.size()];
        for(int i=0;i<temp.size();i++){
            answer[i]=temp.get(i);
        }
        return answer;
    }
}
반응형

+ Recent posts