반응형

문제 설명

길이가 같은 문자열 배열 my_strings와 이차원 정수 배열 parts가 매개변수로 주어집니다. parts[i]는 [s, e] 형태로, my_string[i]의 인덱스 s부터 인덱스 e까지의 부분 문자열을 의미합니다. 각 my_strings의 원소의 parts에 해당하는 부분 문자열을 순서대로 이어 붙인 문자열을 return 하는 solution 함수를 작성해 주세요.


제한사항

1 ≤ my_strings의 길이 = parts의 길이 ≤ 100

1 ≤ my_strings의 원소의 길이 ≤ 100

parts[i]를 [s, e]라 할 때, 다음을 만족합니다.

0 ≤ s ≤ e < my_strings[i]의 길이


입출력 예

my_strings parts result
["progressive", "hamburger", "hammer", "ahocorasick"] [[0, 4], [1, 2], [3, 5], [7, 7]] "programmers"

입출력 예 설명

입출력 예 #1

예제 1번의 입력을 보기 좋게 표로 나타내면 다음과 같습니다.imy_strings[i]parts[i]부분 문자열

i my_strings[i] parts[i] 부분문자열
0 "progressive" [0, 4] "progr"
1 "hamburger" [1, 2] "am"
2 "hammer" [3, 5] "mer"
3 "ahocorasick" [7, 7] "s"

각 부분 문자열을 순서대로 이어 붙인 문자열은 "programmers"입니다. 따라서 "programmers"를 return 합니다.


문제풀이 

-> 반복문을 통해서 my_strings의 길이 만큼 반복하여 my_strings를 parts값을 이용해서 substring한 값을 answer값에 붙여준다. 이 때, substring 사용법은 [ 시작 인덱스(포함)와 끝 인덱스(미포함)] 이니 참고하면 된다.


코드

class Solution {
    public String solution(String[] my_strings, int[][] parts) {
        String answer = "";
        for(int i=0; i<my_strings.length;i++){
            answer += my_strings[i].substring(parts[i][0],parts[i][1]+1);
        }
        return answer;
    }
}
반응형
반응형

문제 설명

1부터 6까지 숫자가 적힌 주사위가 네 개 있습니다. 네 주사위를 굴렸을 때 나온 숫자에 따라 다음과 같은 점수를 얻습니다.

네 주사위에서 나온 숫자가 모두 p로 같다면 1111 × p점을 얻습니다.

세 주사위에서 나온 숫자가 p로 같고 나머지 다른 주사위에서 나온 숫자가 q(p ≠ q)라면 (10 × p + q)2 점을 얻습니다.

주사위가 두 개씩 같은 값이 나오고, 나온 숫자를 각각 p, q(p ≠ q)라고 한다면 (p + q) × |p - q|점을 얻습니다.

어느 두 주사위에서 나온 숫자가 p로 같고 나머지 두 주사위에서 나온 숫자가 각각 p와 다른 q, r(q ≠ r)이라면 q × r점을 얻습니다.

네 주사위에 적힌 숫자가 모두 다르다면 나온 숫자 중 가장 작은 숫자 만큼의 점수를 얻습니다.네 주사위를 굴렸을 때 나온 숫자가 정수 매개변수 a, b, c, d로 주어질 때, 얻는 점수를 return 하는 solution 함수를 작성해 주세요.


제한사항

a, b, c, d는 1 이상 6 이하의 정수입니다.


입출력 예

a b c d result
2 2 2 2 2222
4 1 4 4 1681
6 3 3 6 27
2 5 2 6 30
6 4 2 5 2

입출력 예 설명

입출력 예 #1

예제 1번에서 네 주사위 숫자가 모두 2로 같으므로 1111 × 2 = 2222점을 얻습니다. 따라서 2222를 return 합니다.

 

입출력 예 #2

예제 2번에서 세 주사위에서 나온 숫자가 4로 같고 나머지 다른 주사위에서 나온 숫자가 1이므로 (10 × 4 + 1)2 = 412 = 1681점을 얻습니다. 따라서 1681을 return 합니다.

 

입출력 예 #3

예제 3번에서 a, d는 6으로, b, c는 3으로 각각 같으므로 (6 + 3) × |6 - 3| = 9 × 3 = 27점을 얻습니다. 따라서 27을 return 합니다.

 

입출력 예 #4

예제 4번에서 두 주사위에서 2가 나오고 나머지 다른 두 주사위에서 각각 5, 6이 나왔으므로 5 × 6 = 30점을 얻습니다. 따라서 30을 return 합니다.

 

입출력 예 #5

예제 5번에서 네 주사위 숫자가 모두 다르고 나온 숫자 중 가장 작은 숫자가 2이므로 2점을 얻습니다. 따라서 2를 return 합니다.


문제풀이 

1. 먼저 Set자료형에 a, b, c, d를 담아서 중복되지 수의 갯수를 구한다.

2. a, b, c, d의 숫자와 나온 횟수를 구하기 위해 array 배열을 이용한다.

3. 이차원 배열로 numbers를 만들어서 array에 나온 숫자와 count를 담는다.

4. numbers를 이용해서 경우를 나누어 계산식을 작성한다.


코드

import java.util.*;
class Solution {
    public int solution(int a, int b, int c, int d) {
        int answer = 0;
        int []temp = {a,b,c,d};
        Set<Integer> A = new HashSet<>();
        A.add(a);
        A.add(b);
        A.add(c);
        A.add(d);
        
        int []array = {0,0,0,0,0,0,0};
        int [][]numbers = new int[A.size()][2];
        int count = 0;
        for(int i=0;i<temp.length;i++){
            array[temp[i]]++;
        }
        for(int i=0;i<array.length;i++){
            if(array[i]>0){
                numbers[count][0] = i;
                numbers[count][1] = array[i];
                count ++;
            }
        }
        
        
        
        if(numbers.length==1){
            answer = numbers[0][0]*1111;
        } else if(numbers.length==2&&numbers[0][1]==2){
            int x=numbers[0][0];
            int y=numbers[1][0];
            if(x-y>0){
                answer = (x+y)*(x-y);
            } else {
                answer = (x+y)*(-1)*(x-y);
            }
        } else if(numbers.length==2&&(numbers[0][1]==3||numbers[0][1]==1)){
            int x=numbers[0][1]==3?numbers[0][0]:numbers[1][0];
            int y=numbers[0][1]==3?numbers[1][0]:numbers[0][0];
            answer = (10*x+y)*(10*x+y);
        } else if(numbers.length==3){
            answer = 1;
            for(int i=0; i<numbers.length;i++){
                if(numbers[i][1]==1){
                    answer *= numbers[i][0];
                }
            }
        } else if(numbers.length==4){
            answer = numbers[0][0];
        }
        
        
        return answer;
    }
}
반응형
반응형

문제 설명

문자열 my_string과 정수 배열 index_list가 매개변수로 주어집니다. my_string의 index_list의 원소들에 해당하는 인덱스의 글자들을 순서대로 이어 붙인 문자열을 return 하는 solution 함수를 작성해 주세요.

 


제한사항

1 ≤ my_string의 길이 ≤ 1,000

my_string의 원소는 영소문자로 이루어져 있습니다.

1 ≤ index_list의 길이 ≤ 1,000

0 ≤ index_list의 원소 < my_string의 길이


입출력 예

my_string index_list result
"cvsgiorszzzmrpaqpe" [16, 6, 5, 3, 12, 14, 11, 11, 17, 12, 7] "programmers"
"zpiaz" [1, 2, 0, 0, 3] "pizza"

입출력 예 설명

입출력 예 #1

 

예제 1번의 my_string에서 인덱스 3, 5, 6, 11, 12, 14, 16, 17에 해당하는 글자는 각각 g, o, r, m, r, a, p, e이므로 my_string에서 index_list에 들어있는 원소에 해당하는 인덱스의 글자들은 각각 순서대로 p, r, o, g, r, a, m, m, e, r, s입니다. 따라서 "programmers"를 return 합니다.

 

입출력 예 #2

 

예제 2번의 my_string에서 인덱스 0, 1, 2, 3에 해당하는 글자는 각각 z, p, i, a이므로 my_string에서 index_list에 들어있는 원소에 해당하는 인덱스의 글자들은 각각 순서대로 p, i, z, z, a입니다. 따라서 "pizza"를 return 합니다.


풀이

-> split 함수로 my_string을 배열에 담고 index_list의 길이 만큼 반복문으로 index값을 담아주면서 answer에 문자를 합쳐나간다.


코드

class Solution {
    public String solution(String my_string, int[] index_list) {
        String answer = "";
        String[] temp = my_string.split("");
        for(int i=0;i<index_list.length;i++){
            answer += temp[index_list[i]];
        }
        return answer;
    }
}
반응형
반응형

문제 설명

어떤 문자열에 대해서 접미사는 특정 인덱스부터 시작하는 문자열을 의미합니다. 예를 들어, "banana"의 모든 접미사는 "banana", "anana", "nana", "ana", "na", "a"입니다.

문자열 my_string과 is_suffix가 주어질 때, is_suffix가 my_string의 접미사라면 1을, 아니면 0을 return 하는 solution 함수를 작성해 주세요.


제한사항

1 ≤ my_string의 길이 ≤ 100

1 ≤ is_suffix의 길이 ≤ 100

my_string과 is_suffix는 영소문자로만 이루어져 있습니다.


입출력 예

my_string is_suffix result
"banana" "ana" 1
"banana" "nan" 0
"banana" "wxyz" 0
"banana" "abanana" 0

입출력 예 설명

입출력 예 #1

예제 1번에서 is_suffix가 my_string의 접미사이기 때문에 1을 return 합니다.

 

입출력 예 #2

예제 2번에서 is_suffix가 my_string의 접미사가 아니기 때문에 0을 return 합니다.

 

입출력 예 #3

예제 3번에서 is_suffix가 my_string의 접미사가 아니기 때문에 0을 return 합니다.

 

입출력 예 #4

예제 4번에서 is_suffix가 my_string의 접미사가 아니기 때문에 0을 return 합니다.


문제풀이

-> my_string 의 길이에 is_suffix의 길이를 빼서 startIndex를 구하고 my_string의 길이를 endIndex로 사용한다. is_suffix의 length는 my_string보다 길 수 도 있기 때문에 그부분은 예외처리를 해주었다.


코드

class Solution {
    public int solution(String my_string, String is_suffix) {
        int answer = 0;
        int endIndex = my_string.length(); // 원본 문자열의 길이
        int length = is_suffix.length()>endIndex?endIndex:is_suffix.length();
        int startIndex = endIndex - length; // 뒤에서 3글자 앞까지 자르기
        String temp = my_string.substring(startIndex, endIndex);
        if(is_suffix.equals(temp)){
            answer = 1;
        } else {
            answer = 0;
        }
        return answer;
    }
}
반응형
반응형

문제 설명

boolean 변수 x1, x2, x3, x4가 매개변수로 주어질 때, 다음의 식의 true/false를 return 하는 solution 함수를 작성해 주세요.

(x1  x2) ∧ (x3  x4)


입출력 예

x1 x2 x3 x4 result
false true true true true
true false false false false

입출력 예 설명

입출력 예 #1

예제 1번의 x1, x2, x3, x4로 식을 계산하면 다음과 같습니다.따라서 true를 return 합니다.

(x1 ∨ x2) ∧ (x3 ∨ x4) ≡ (F ∨ T) ∧ (T ∨ T) ≡ T ∧ T ≡ T

 

입출력 예 #2

예제 2번의 x1, x2, x3, x4로 식을 계산하면 다음과 같습니다.따라서 false를 return 합니다.

(x1 ∨ x2) ∧ (x3 ∨ x4) ≡ (T ∨ F) ∧ (F ∨ F) ≡ T ∧ F ≡ F


∨과 ∧의 진리표는 다음과 같습니다.

x y x V y x ∧ y
T T T T
T F T F
F T T F
F F F F

문제풀이

-> x1 V x2 의 결과를 변수 a로 두고, x3 V x4 의 결과를 변수 b로 둔다. V계산은 하나라도 TRUE 이면 TRUE값이 되도록 if문을 통해서 작성한다. a ∧ b 는 둘다 TRUE일 때만 TRUE값을 가지므로 마찬가지로 if문을 통해서 answer 값을 가지도록 작성한다.


코드

class Solution {
    public boolean solution(boolean x1, boolean x2, boolean x3, boolean x4) {
        boolean answer = true;
        boolean a = true;
        boolean b = true;
        if(x1==true||x2==true){ // 하나라도 true이면 a는 true
            a = true;
        } else {
            a = false;
        }
        if(x3==true||x4==true){ // 하나라도 true이면 b는 true
            b = true;
        } else {
            b = false;
        }
        if(a==true&&b==true){ // 둘다 true여야 answer는 true
            answer = true;
        } else {
            answer = false;
        }
        
        return answer;
    }
}
반응형
반응형

문제 설명

정수 배열 arr가 주어집니다. arr를 이용해 새로운 배열 stk를 만드려고 합니다.

변수 i를 만들어 초기값을 0으로 설정한 후 i가 arr의 길이보다 작으면 다음 작업을 반복합니다.

만약 stk가 빈 배열이라면 arr[i]를 stk에 추가하고 i에 1을 더합니다.

stk에 원소가 있고, stk의 마지막 원소가 arr[i]보다 작으면 arr[i]를 stk의 뒤에 추가하고 i에 1을 더합니다.

stk에 원소가 있는데 stk의 마지막 원소가 arr[i]보다 크거나 같으면 stk의 마지막 원소를 stk에서 제거합니다.

위 작업을 마친 후 만들어진 stk를 return 하는 solution 함수를 완성해 주세요.


제한사항

1 ≤ arr의 길이 ≤ 100,000

1 ≤ arr의 원소 ≤ 100,000


입출력 예

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

 


입출력 예 설명

입출력 예 #1

각 작업을 마친 후에 배열의 변화를 나타내면 다음 표와 같습니다.

i arr[i] stk
0 1 []
1 4 [1]
2 2 [1, 4]
2 2 [1]
3 5 [1, 2]
4 3 [1, 2, 5]
4 3 [1, 2]
- - [1, 2, 3]

따라서 [1, 2, 3]을 return 합니다.


문제 풀이

-> 동적으로 배열을 생성하기 위해서 ArrayList를 사용한다. while문을 이용해서 i가 arr의 길이만큼 커질때까지 동작하는 코드를 작성한다. stk가 비었거나, stk의 마지막 원소가 arr[i]보다 작으면 stk에 arr[i]를 추가해주고 stk의 마지막 원소가 arr[i]보다 크거나 같으면 stk의 마지막 원소를 제거한다. stk의 크기 만큼 result를 선언하고 안에 stk의 값들을 넣어준다.


코드

import java.util.ArrayList;

class Solution {
    public int[] solution(int[] arr) {
        ArrayList<Integer> stk = new ArrayList<>();
        int i = 0;
        
        while (i < arr.length) {
            if (stk.isEmpty() || stk.get(stk.size() - 1) < arr[i]) {
                stk.add(arr[i]);
                i++;
            } else {
                stk.remove(stk.size() - 1);
            }
        }
        
        // ArrayList를 int 배열로 변환
        int[] result = new int[stk.size()];
        for (int j = 0; j < stk.size(); j++) {
            result[j] = stk.get(j);
        }
        
        return result;
    }
}
반응형
반응형

문제 설명

모든 자연수 x에 대해서 현재 값이 x이면 x가 짝수일 때는 2로 나누고, x가 홀수일 때는 3 * x + 1로 바꾸는 계산을 계속해서 반복하면 언젠가는 반드시 x가 1이 되는지 묻는 문제를 콜라츠 문제라고 부릅니다

그리고 위 과정에서 거쳐간 모든 수를 기록한 수열을 콜라츠 수열이라고 부릅니다.

계산 결과 1,000 보다 작거나 같은 수에 대해서는 전부 언젠가 1에 도달한다는 것이 알려져 있습니다.

임의의 1,000 보다 작거나 같은 양의 정수 n이 주어질 때 초기값이 n인 콜라츠 수열을 return 하는 solution 함수를 완성해 주세요.


제한사항

1 ≤ n ≤ 1,000


입출력 예

n result
10 [10, 5, 16, 8, 4, 2, 1]

입출력 예 설명

입출력 예 #1

순서대로 연산한 결과를 표로 만들면 다음과 같습니다.

연산 횟수 x 홀짝 여부
0 10 짝수
1 5 홀수
2 16 짝수
3 8 짝수
4 4 짝수
5 2 짝수
6 1 홀수

따라서 [10, 5, 16, 8, 4, 2, 1]을 return 합니다.


문제풀이

-> n을 받아서 짝수일 때와 홀수일 때로 분기를 나눈 후, 짝수일 경우 n/2, 홀수일 경우 3*n+1을 계산하여 해당 값이 1이 될 때까지 while문을 통해서 반복한다.


코드

import java.util.ArrayList;

class Solution {
    public int[] solution(int n) {
        ArrayList<Integer> answerT = new ArrayList<>();
        int[] answer = {};
        int count = 0;
        while(n!=1){
            answerT.add(n);
            if(n%2==0){
                n=n/2;
            } else {
                n=3*n+1;
            }
            count++;
        }
        answer = new int[count+1]; // 마지막 값 1은 직접 넣기 위해 count+1로 배열 크기 설정
        for(int i=0;i<count;i++){
            answer[i]=answerT.get(i);
        }
        answer[count] = 1;
        return answer;
    }
}
반응형
반응형

문제 설명

 

정수 l과 r이 주어졌을 때, l 이상 r이하의 정수 중에서 숫자 "0"과 "5"로만 이루어진 모든 정수를 오름차순으로 저장한 배열을 return 하는 solution 함수를 완성해 주세요. 

만약 그러한 정수가 없다면, -1이 담긴 배열을 return 합니다.


제한사항

1 ≤ l ≤ r ≤ 1,000,000


입출력 예

l r result
5 555 [5, 50, 55, 500, 505, 550, 555]
10 20 [-1]

입출력 예 설명

입출력 예 #1

5 이상 555 이하의 0과 5로만 이루어진 정수는 작은 수부터 5, 50, 55, 500, 505, 550, 555가 있습니다. 따라서 [5, 50, 55, 500, 505, 550, 555]를 return 합니다.

 

입출력 예 #2

10 이상 20 이하이면서 0과 5로만 이루어진 정수는 없습니다. 따라서 [-1]을 return 합니다.


문제 풀이

-> 5 ~ 555 까지의 모든 수에서 각 자리에 5 또는 0 이 아닌 수가 있으면 넘기고, 5와 0으로만 이루어진 수라면 배열에 담아서 answer에 넣어주면 된다. 배열에 담을 때, count도 세어주어서 answer 변수를 초기화하는데 사용한다.


코드

import java.util.ArrayList;
class Solution {
    public int[] solution(int l, int r) {
        ArrayList<Integer> answerT = new ArrayList<>();
        
        int count = 0;
        for(int i=l;i<r+1;i++){
            String temp = String.valueOf(i);
            String[] list = temp.split("");
            int test = 1;
            for(int j=0;j<list.length;j++){
                if(!list[j].equals("0")&&!list[j].equals("5")){ // 각 자리가 0 이나 5가 아닌 다른 수를 포함하는지 확인
                    test=0;
                    break;
                } 
            }
            if(test==1){
                count++;
                answerT.add(i);
            }
        }
        
        if(answerT.isEmpty()){ // 배열에 어떠한 값도 존재하지 않으면 -1 을 담은 배열 리턴
            return new int[]{-1};
        } else {
            int[] answer = new int[count];  
            for(int i=0; i<count; i++){
                answer[i] = answerT.get(i);
            }
        return answer;
            
        }
        
    }
}
반응형

+ Recent posts