프로그래머스 문제풀이/알고리즘 (JAVA)

[JAVA] 프로그래머스 알고리즘 문제풀이 - Level 0 (134~139번 문제풀이)

남건욱 2023. 10. 16. 16:11

목차

    반응형
    134. 세 개의 구분자

    문제

    import java.util.*;
    
    class Solution {
        public String[] solution(String myStr) {    
            List<String> list = new ArrayList<>();
            int start = 0;
            int end = 0;
            
            for(int i=0; i<myStr.length(); i++){
                char ch = myStr.charAt(i);
                
                if(ch == 'a' || ch == 'b' || ch == 'c'){
                    if(end > start){
                        String sub = myStr.substring(start, end);
                        list.add(sub);
                    }
                    start = i+1;
                }
                end = i+1;
            }
            
            if(end > start){
                String sub = myStr.substring(start, end);
                list.add(sub);
            }
            
            if(list.isEmpty()){
                return new String[]{"EMPTY"};
            } else{
                return list.toArray(new String[0]);
            }
            
        }
    }

    <작성한 코드>

    문자열 형식의 List를 하나 만들어줬다. 그 뒤 각각의 원소들을 ch에 넣어주고 비교했다. 만약 ch가 a, b, c 중 하나라면 조건에 걸리고 내부에서 한번 더 걸린다. end가 start보다 크다면 sub변수 안에 myStr을 start번째부터 end까지 넣어주고 list에 추가했다. 이때 start는 if가 한번 실행될 때 i+1로 해줬고, end는 전체반복문이 끝나기 전에 i+1을 해줬다. 그 뒤 end가 start보다 크다면 다시 한번 substring을 이용해서 자르고 list에 넣어줬다. 만약 list가 비어있으면 EMPTY를 반환하고 아니라면 toArray()를 사용하여 리스트를 배열로 변환하여 반환했다.

     

     

     

    135. rny_string

    문제

    class Solution {
        public String solution(String rny_string) {
            String answer = rny_string.replace("m", "rn");
            return answer;
        }
    }

    <작성한 코드>

    간단한 문제였다. replace를 사용하여 m이 들어가 있으면 rn으로 바꿔주었다. 그 후 반환하였다.

     

     

     

    136. 문자열 바꿔서 찾기

    문제

    import java.util.*;
    
    class Solution {
        public int solution(String myString, String pat) {
            int answer = 0;
            
            String reString = myString.replace('A', 'X').replace('B', 'Y')
                .replace('X', 'B').replace('Y', 'A');
            
            if(reString.contains(pat)) answer = 1;
            
            return answer;
        }
    }

    <작성한 코드>

    처음에 myString.replace('A', 'B').replace('B', 'A') 했다가 잘못 생각했단 걸 깨닫고 다시 작성했다. 앞에 말한 코드대로 하면 바뀐 B도 다시 A로 바뀌기 때문에 실행할 수 없다. 그래서 A는 X로 바꿔두고  B는 Y로 바꿔둔 뒤에 다시 X를 B, Y를 A로 바꿔줬다. 그 뒤에 contains를 사용해서 reString안에 pat이 포함되는지 확인한 뒤에 확인되면 answer에 1을 넣어주고, 아니면 그대로 0이 담긴 채로 반환될 것이다.

     

     

     

    137. 간단한 식 계산하기

    문제

    class Solution {
        public int solution(String binomial) {
            int answer = 0;
            String[] result = binomial.split(" ");
            
            int num1 = Integer.parseInt(result[0]);
            int num2 = Integer.parseInt(result[2]);
    
            if(result[1].equals("+")){
                answer = num1 + num2;
            } else if(result[1].equals("-")){
                answer = num1 - num2;
            } else{
                answer = num1 * num2;
            }
            
            return answer;
        }
    }

    <작성한 코드>

    binomial 문자열을 공백을 기준으로 나눠서 리스트에 저장했다. 그리고 문자열이기 때문에 계산을 하기 위해 Integer.parseInt()를 사용해서 result [0], result [2]에 들어있는 문자열들을 정수형으로 변환했다. if문에서 result [1]에 들어있는 기호가 +일 때는 두 값을 더해주고, -일 때는 빼주고, 아니면 곱해주고 answer을 반환했다.

     

     

     

    138. 문자열 잘라서 정렬하기

    문제

    import java.util.*;
    
    class Solution {
        public String[] solution(String myString) {
            String[] splitAnswer = myString.split("x");
    
            List<String> list = new ArrayList<>();
            for(String str : splitAnswer){
                if(!str.isEmpty()){
                    list.add(str);
                }
            }
            
            Collections.sort(list);
            
            String[] answer = new String[list.size()];
            answer = list.toArray(answer);
            
            return answer;
        }
    }

    <작성한 코드>

    splitAnswer에 x를 기준으로 나눈 문자열을 배열형식으로 대입해 줬다. 그리고 list를 하나 만들어서 splitAnswer안에 있는 값이 비어있지 않다면 list에 추가해 줬다. 그 후 Collections.sort()를 이용해서 list를 오름차순으로 정렬해 준 뒤에 answer변수를 만들어서 list의 길이만큼 선언해 주고 toArray()를 사용해서 answer의 배열형식으로 list안의 값을 answer에 대입해 준 뒤 반환하였다.

     

     

     

    139. x 사이의 개수

    문제

    class Solution {
        public int[] solution(String myString) {
            String[] splitString = myString.split("x", myString.length());
            int[] answer = new int[splitString.length];
    
            for(int i=0; i<splitString.length; i++){
                answer[i] = splitString[i].length();
            }
                   
            return answer;
        }
    }

    <작성한 코드>

    myString을 x를 기준으로 나눠줬고 최대수도 myString.length()를 사용해서 설정해 줬다. 그 뒤 splitString의 길이만큼의 크기를 갖는 answer를 생성해 줬다. answer안에는 splitString의 각 배열들의 길이를 대입해 주고 반환하였다.

    반응형
    프로필사진

    남건욱's 공부기록