프로그래머스 문제풀이/알고리즘 (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 공부기록