반응형

문제 설명

 

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;
    }
}
반응형
반응형

문제 설명

 

정수 리스트 num_list가 주어집니다. 가장 첫 번째 원소를 1번 원소라고 할 때, 홀수 번째 원소들의 합과 짝수 번째 원소들의 합 중 큰 값을 return 하도록 solution 함수를 완성해주세요. 두 값이 같을 경우 그 값을 return합니다.


제한사항

 

5 ≤ num_list의 길이 ≤ 50

-9 ≤ num_list의 원소 ≤ 9


입출력 예

 

num_list result
[4, 2, 6, 1, 7, 6] 17
[-1, 2, 5, 6, 3] 8

입출력 예 설명

 

입출력 예 #1

홀수 번째 원소들의 합은 4 + 6 + 7 = 17, 짝수 번째 원소들의 합은 2 + 1 + 6 = 9 이므로 17을 return합니다.

 

입출력 예 #2

홀수 번째 원소들의 합은 -1 + 5 + 3 = 7, 짝수 번째 원소들의 합은 2 + 6 = 8 이므로 8을 return합니다.

 


풀이

 

-> odd, even으로 짝수일 떄와 홀수일 때 더할 값을 담을 변수를 미리 만들어둔다. 반복문을 통해 i가 짝수일 때와 홀수일 때, 각각 even값과 odd값에 num_list[i]를 더해준다. 삼항연사자를 통해서 큰값을 return 한다.


코드

 

class Solution {
    public int solution(int[] num_list) {
        int answer = 0;
        int odd = 0;
        int even = 0;
        for(int i=0; i<num_list.length;i++){
            if(i%2==0){
                even += num_list[i];
            } else {
                odd += num_list[i];
            }
        }
        answer = even>odd?even:odd;
        return answer;
    }
}

 

반응형
반응형

문제 설명

 

정수 리스트 num_list와 정수 n이 주어질 때, num_list의 첫 번째 원소부터 마지막 원소까지 n개 간격으로 저장되어있는 원소들을 차례로 담은 리스트를 return하도록 solution 함수를 완성해주세요.


제한사항

 

5 ≤ num_list의 길이 ≤ 20

1 ≤ num_list의 원소 ≤ 9

1 ≤ n ≤ 4


입출력 예

 

num_list n result
[4, 2, 6, 1, 7, 6] 2 [4, 6, 7]
[4, 2, 6, 1, 7, 6] 4 [4, 7]

입출력 예 설명

 

입출력 예 #1

[4, 2, 6, 1, 7, 6]에서 2개 간격으로 저장되어 있는 원소들은 [4, 6, 7]입니다.

 

입출력 예 #2

[4, 2, 6, 1, 7, 6]에서 4개 간격으로 저장되어 있는 원소들은 [4, 7]입니다.


풀이

 

-> 먼저 num_list의 길이와 n을 가지고 선언할 answer배열이 길이를 구한다. 이 때, num_list를 n으로 나눈 나머지가 있으면 나눈값에서 +1을 해주고, 나눈 나머지가 0이면 그대로 나눈 값을 길이인 length로 둔다. 그다음 answer배열을 선언해주고 length 만큼의 반복문을 통해 result배열에 값들을 담아준다.


코드

class Solution {
    public int[] solution(int[] num_list, int n) {
        int[] answer = {};
        int length = num_list.length%n==0?num_list.length/n:num_list.length/n+1;
        answer = new int[length];
        for(int i=0;i<length;i++){
            answer[i]=num_list[n*i];
        }
        return answer;
    }
}

 

반응형
반응형

문제 설명

 

문자열 리스트 str_list에는 "u", "d", "l", "r" 네 개의 문자열이 여러 개 저장되어 있습니다. str_list에서 "l"과 "r" 중 먼저 나오는 문자열이 "l"이라면 해당 문자열을 기준으로 왼쪽에 있는 문자열들을 순서대로 담은 리스트를, 먼저 나오는 문자열이 "r"이라면 해당 문자열을 기준으로 오른쪽에 있는 문자열들을 순서대로 담은 리스트를 return하도록 solution 함수를 완성해주세요. "l"이나 "r"이 없다면 빈 리스트를 return합니다.


제한사항

 

1 ≤ str_list의 길이 ≤ 20

str_list는 "u", "d", "l", "r" 네 개의 문자열로 이루어져 있습니다.


입출력 예

 

str_list result
["u", "u", "l", "r"] ["u", "u"]
["l"] []

입출력 예 설명

 

입출력 예 #1

"r"보다 "l"이 먼저 나왔기 때문에 "l"의 왼쪽에 있는 문자열들을 담은 리스트인 ["u", "u"]를 return합니다.

 

입출력 예 #2

"l"의 왼쪽에 문자열이 없기 때문에 빈 리스트를 return합니다.


풀이

 

-> 먼저 str_list에서 l과 r 값이 몇번째 인덱스에서 처음 나오는지 count와 pointer 변수를 통해서 구해주었다. 그 다음 pointer가 l일 때와 r일 때를 나누어서 answer를 선언해주고, 반복문을 통해서 각 경우의 배열 크기만큼 str_list에서 answer배열에 값을 담았다. 이 때, pointer가 l 일 때는, count가 0이 아니고, pointer가 r 일 때는, count가 str_list의 길이와 같으면 안된다는 것을 표현해주었다.


코드

class Solution {
    public String[] solution(String[] str_list) {
        String[] answer = {};
        int count = 0;
        String pointer = "";
        for(int i=0;i<str_list.length;i++){
            if(str_list[i].equals("l")||str_list[i].equals("r")){
                pointer = str_list[i];
                break;
            }
            count++;
        }
        
        if(pointer.equals("l")){
            if(count!=0){
                answer = new String[count];
                for(int i=0;i<count;i++){
                    answer[i]=str_list[i];
                }
            }
        } else if(pointer.equals("r")) {
            if(count!=str_list.length-1){
                answer = new String[str_list.length-count-1];
                for(int i=0;i<str_list.length-count-1;i++){
                    answer[i]=str_list[count+1+i];
                }
            }
        }
        
        return answer;
    }
}

 

반응형
반응형

문제 설명

 

정수 리스트 num_list와 정수 n이 주어질 때, num_list를 n 번째 원소 이후의 원소들과 n 번째까지의 원소들로 나눠 n 번째 원소 이후의 원소들을 n 번째까지의 원소들 앞에 붙인 리스트를 return하도록 solution 함수를 완성해주세요.


제한사항

 

2 ≤ num_list의 길이 ≤ 30

1 ≤ num_list의 원소 ≤ 9

1 ≤ n  num_list의 길이


입출력 예

 

num_list n result
[2, 1, 6] 1 [1, 6, 2]
[5, 2, 1, 7, 5] 3 [7, 5, 5, 2, 1]

입출력 예 설명

 

입출력 예 #1

[2, 1, 6]에서 첫 번째 이후의 원소는 [1, 6]이고 첫 번째까지의 원소는 [2]입니다. 두 리스트를 이어 붙이면 [1, 6, 2]가 됩니다.

 

입출력 예 #2

[5, 2, 1, 7, 5]에서 세 번째 이후의 원소는 [7, 5]이고 세 번째까지의 원소는 [5, 2, 1]입니다. 두 리스트를 이어 붙이면 [7, 5, 5, 2, 1]가 됩니다.


풀이

 

-> ArrayList를 하나 만들어서 n부터 num_list의 length까지의 값을 먼저 담고, 0부터 n-1까지의 값들을 담아서 answer 배열에 다시 담아주었다.


코드

 

import java.util.*;
class Solution {
    public int[] solution(int[] num_list, int n) {
        int[] answer = {};
        ArrayList<Integer> list = new ArrayList<>();
        for(int i=n;i<num_list.length;i++){
            list.add(num_list[i]);
        }
        
        for(int i=0;i<n;i++){
            list.add(num_list[i]);
        }
        
        answer = new int[list.size()];
        
        for(int i=0;i<list.size();i++){
            answer[i]=list.get(i);
        }
        return answer; 
    }
}
반응형

+ Recent posts