Post

JAVA 알고리즘 기초 30문제

JAVA 알고리즘 기초 30문제

1. 두수의 연산값 비교하기

1
2
3
4
5
6
7
8
9
10
class Solution {
    public int solution(int a, int b) {
        int answer = 0;
        
        String str = a + "" + b;
        int sum = 2 * a * b;
        
        return Math.max(Integer.parseInt(str), sum);
    }
}

2. 문자열로 변환

1
2
3
4
5
6
class Solution {
    public String solution(int n) {
        String answer = "";
        return answer + n;
    }
}

3. flag에 따라 다른 값 반환하기

1
2
3
4
5
class Solution {
    public int solution(int a, int b, boolean flag) {
        return flag ? a + b : a - b;
    }
}

4. 공배수

1
2
3
4
5
class Solution {
    public int solution(int number, int n, int m) {
        return number % n == 0 && number % m == 0 ? 1: 0;
    }
}

5. 배열 만들기 3

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
import java.util.Arrays;

class Solution {
    public int[] solution(int[] arr, int[][] intervals) {
        
        int[] arr1 = Arrays.copyOfRange(arr, intervals[0][0], intervals[0][1] + 1);
        int[] arr2 = Arrays.copyOfRange(arr, intervals[1][0], intervals[1][1] + 1);
        
        int[] answer = new int[arr1.length + arr2.length];
        
        for(int i = 0; i < arr1.length; i++) answer[i] = arr1[i];
        int j = 0;
        for(int i = arr1.length; i < answer.length; i++) answer[i] = arr2[j++];
        
        return answer;
    }
}

6. 문자열 잘라서 졍렬하기

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
import java.util.*;

class Solution {
    public ArrayList<String> solution(String myString) {
        
        ArrayList<String> answer = new ArrayList<>();
        String[] str = myString.split("x");
        
        for(String s:str) 
            if(!s.isEmpty()) answer.add(s);
        
        Collections.sort(answer);
        return answer;
    }
}

7. 배열의 길이를 2의 거듭제곱으로 만들기

1
2
3
4
5
6
7
8
9
10
11
12
13
class Solution {
    public int[] solution(int[] arr) {
        int length = 1;        
        while(length < arr.length) length *= 2;

        int[] answer = new int[length];

        for(int i = 0 ; i < arr.length ; i++) {
            answer[i] = arr[i];
        }
        return answer;
    }
}

8. 문자열이 몇 번 등장하는지 세기

1
2
3
4
5
6
7
8
9
10
11
12
13
14
class Solution {
    public int solution(String myString, String pat) {
        int answer = 0;
        int strLength = myString.split("").length;
        int patLength = pat.split("").length;
        
        for(int i = 0 ; i < strLength - patLength + 1 ; i++) {
            if(myString.substring(i, i + patLength).equals(pat))  {
                answer++;
            }
        }
        return answer;
    }
}

9. 특정 문자열로 끝나는 가장 긴 부분 문자열 찾기

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
class Solution {
    public String solution(String myString, String pat) {
        String answer = "0";
        int strLength = myString.split("").length; 
        int patLength = pat.split("").length;
        
        for(int i = strLength; i >= patLength ; i--) {
            if(myString.substring(i - patLength, i ).equals(pat))  {
                answer = myString.substring(0, i);
                break;
            }
        }
        // 다른 사람 풀이
        // String answer = "";
        // int idx = myString.lastIndexOf(pat);
        // answer = myString.substring(0, idx) + pat;
        // return answer;

        return answer;
    }
}

10. 1로 만들기

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
class Solution {
    public int solution(int[] num_list) {
        int answer = 0;
            
        for(int num : num_list) {
            int cnt = 0;
            while(num > 1) {
                cnt++;
                num /= 2;
            }
            answer += cnt;
        }
        return answer;
    }
}

11. 문자열 뒤집기

1
2
3
4
5
6
class Solution {
    public String solution(String my_string, int s, int e) {
        StringBuffer str = new StringBuffer(my_string.substring(s,e+1));
        return my_string.substring(0,s) + str.reverse().toString() + my_string.substring(e+1);
    }
}

12. 배열 만들기 5

1
2
3
4
5
6
7
8
9
10
11
12
import java.util.ArrayList;

class Solution {
    public ArrayList<Integer> solution(String[] intStrs, int k, int s, int l) {
        ArrayList<Integer> answer = new ArrayList<>();
        for(String str : intStrs) {
            int num = Integer.parseInt(str.substring(s, s+l));
            if(num > k) answer.add(num);
        }
        return answer;
    }
}

13. 수열과 구간 쿼리 3

1
2
3
4
5
6
7
8
9
10
11
class Solution {
    public int[] solution(int[] arr, int[][] queries) {        
        for (int[] query : queries) {
            int i = query[0], j = query[1];
            int temp = arr[i]; 
            arr[i] = arr[j];
            arr[j] = temp;
        }
        return arr;
    }
}

14. 빈 배열에 추가, 삭제하기

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
import java.util.ArrayList;

class Solution {
    public int[] solution(int[] arr, boolean[] flag) {
        String str = "";
        
        for(int i = 0 ; i < flag.length ; i++) {
            if(flag[i]) {
                str += (arr[i] + "").repeat(arr[i] * 2);
            } else {
                str = str.substring(0, str.length() - arr[i]);
            }
        }   
        
        int[] answer = new int[str.length()];
        
        for(int i = 0 ; i < answer.length ; i++) {
            answer[i] = Integer.parseInt(str.split("")[i]);
        }
        
        return answer;
    }
}

15. ad 제거하기

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
import java.util.*;

public class Solution {
    public String[] solution(String[] strArr) {
        ArrayList<String> str = new ArrayList<>();  
        for (String s : strArr) {
            if (!s.contains("ad")) {  
                str.add(s);
            }
        }
        String[] answer=str.toArray(new String[str.size()]);
        return answer;

    }
}

16. 날짜 비교하기

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
public class Solution {
    public int solution(int[] date1, int[] date2) {
        
        if (date1[0] < date2[0]) {
            return 1;  
        } else if (date1[0] > date2[0]) {
            return 0;  
        } else {
            if (date1[1] < date2[1]) {
                return 1; 
            } else if (date1[1] > date2[1]) {
                return 0; 
            } else {
                if (date1[2] < date2[2]) {
                    return 1;  
                } else {
                    return 0; 
                }
            }
        }
    }
}

17. 수열과 구간 쿼리 1

1
2
3
4
5
6
7
8
9
10
11
12
13
public class Solution {
    public int[] solution(int[] arr, int[][] queries) {
        for (int[] q : queries) {
            int s = q[0];  
            int e = q[1];  
           
            for (int i = s; i <= e; i++) {
                arr[i] += 1;
            }
        }
        return arr;  
    }
}

18. 글자 지우기

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
public class Solution {
    public String solution(String my_string, int[] indices) {
        String answer = "";
        for (int i = 0; i < my_string.length(); i++) {   
            int a = 0;
            for (int x : indices) {
                if (x == i) {
                    a=1;
                    break;
                }
            }
            if (a==0) {
                answer += my_string.charAt(i);
            }
        }
        return answer;
    }
}

19. 등차수열의 특정한 항만 더하기

1
2
3
4
5
6
7
8
9
10
11
12
class Solution {
    public int solution(int a, int d, boolean[] included) {
        int answer = 0;
        for(int i=0;i<included.length;i++){
            int x=a+i*d;   
            if(included[i]==true){
                answer+=x;
            }
        }
        return answer;
    }
}

20. 문자열 섞기

1
2
3
4
5
6
7
8
9
10
class Solution {
    public String solution(String str1, String str2) {
        String answer = "";
        for(int i=0;i<str1.length();i++){
            answer+=str1.charAt(i);
            answer+=str2.charAt(i);
        }
        return answer;
    }
}

21. 이차원 배열 대각선 순회하기

1
2
3
4
5
6
7
8
9
10
11
12
13
class Solution {
    public int solution(int[][] board, int k) {
        int answer = 0;
        for(int i=0;i<board.length;i++){
            for(int j=0;j<board[i].length;j++){
                if(i+j<=k){
                    answer+=board[i][j];
                }
            }
        }
        return answer;
    }
}

22. 세로읽기

1
2
3
4
5
6
7
8
9
class Solution {
    public String solution(String my_string, int m, int c) {
        String answer = "";       
        for(int i = c - 1; i < my_string.length(); i += m){
            answer+=my_string.charAt(i);
        }     
        return answer;
    }
}

23. 문자열 묶기

1
2
3
4
5
6
7
8
9
10
11
12
import java.util.Arrays;

class Solution {
    public int solution(String[] strArr) {
        int[] answer = new int[strArr.length];
      
        for(String s : strArr) {
            answer[s.length() -1]++;
        }
        return Arrays.stream(answer).max().getAsInt();
    }
}

24. 세 개의 구분자

1
2
3
4
5
6
7
8
9
10
11
import java.util.Arrays;

class Solution {
    public String[] solution(String myStr) {
        String[] result = Arrays.stream(myStr.split("[abc]"))
            .filter(s -> !s.isEmpty())
            .toArray(String[]::new);
        
        return result.length != 0 ? result : new String[]{"EMPTY"};
    }
}

25. 2의 영역

1
2
3
4
5
6
7
8
9
10
11
12
import java.util.Arrays;
import java.util.stream.IntStream;

class Solution {
    public int[] solution(int[] arr) {
        int[] indexes = IntStream.range(0, arr.length) // Python의 range와 비슷한 역할
           .filter(i -> arr[i] == 2) // 인덱스 뽑기
           .toArray();
        
        return indexes.length != 0 ? Arrays.copyOfRange(arr, indexes[0], indexes[indexes.length - 1] + 1): new int[]{-1};
    }
}

26. 리스트 자르기

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
import java.util.stream.IntStream;
import java.util.Arrays;

class Solution {
    public int[] solution(int n, int[] slicer, int[] num_list) {
        int a = slicer[0], b = slicer[1], c = slicer[2];
        int[] answer = {};

        if (n == 1) {
            answer = Arrays.copyOfRange(num_list, 0, b + 1);
        } else if (n == 2) {
            answer = Arrays.copyOfRange(num_list, a, num_list.length);
        } else if (n == 3) {
            answer = Arrays.copyOfRange(num_list, a, b + 1);
        } else if (n == 4) {
            answer = IntStream.range(a, b + 1)
                    .filter(i -> (i - a) % c == 0) // 간격에 해당하는 인덱스 뽑기
                    .map(i -> num_list[i])
                    .toArray();
        }
        return answer;
    }
}

27. 간단한 논리 연산

1
2
3
4
5
class Solution {
    public boolean solution(boolean x1, boolean x2, boolean x3, boolean x4) {
        return (x1 || x2) && (x3 || x4);
    }
}

28. 문자열 반복해서 출력하기

1
2
3
4
5
6
7
8
9
10
11
import java.util.Scanner;

public class Solution {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        String str = sc.next();
        int n = sc.nextInt();
      
        System.out.println(str.repeat(n));
    }
}

29. 커피 심부름

1
2
3
4
5
6
7
8
9
10
11
class Solution {
    public int solution(String[] order) {
        int answer = 0;    
        for(String o : order) {
            if(o.contains("americano")) answer += 4500;
            else if(o.contains("latte")) answer += 5000;
            else answer += 4500;
        }
        return answer;
    }
}

30. 조건에 맞게 수열 변환하기 2

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
import java.util.Arrays;

public class Solution {
    public int solution(int[] arr) {
        int[] previousArr;
        int x = 0;
        
        while (true) {
             previousArr = Arrays.copyOf(arr, arr.length);

            for (int i = 0; i < arr.length; i++) {
                if (arr[i] >= 50 && arr[i] % 2 == 0) {
                    arr[i] /= 2; 
                } else if (arr[i] < 50 && arr[i] % 2 != 0) {
                    arr[i] = arr[i] * 2 + 1;
                }
            }

            if (Arrays.equals(previousArr, arr)) {
                break;
            }
            x++;
        }
        return x;
    }
}

END

This post is licensed under CC BY 4.0 by the author.