[코딩 테스트 RUN] 코딩 기초 트레이닝 18일차: 문자열

코테런/코딩 기초 트레이닝(완주)
2026.02.23

⚠️ 주의!
프로그래머스에서 낸 코딩 문제에 대한 해답이 들어있습니다.
열람 시 주의해주세요.

 

x 사이의 개수

문자열 myString이 주어집니다. myString을 문자 "x"를 기준으로 나눴을 때 나눠진 문자열 각각의 길이를 순서대로 저장한 배열을 return 하는 solution 함수를 완성해 주세요.

 

문제 해설

split으로 나눠 사용하면 좋은 문제. 다만 x로 끝날 경우 맨 끝이 추가되지 않음에 유의. ArrayList를 사용하여 빈 문자열이나 length 0을 add해두면 편하다.

 

정답

import java.util.ArrayList;
import java.util.Arrays;

class Solution {
    public int[] solution(String myString) {
        int[] answer = {};
        String[] str = myString.split("x");
        ArrayList <String> list = new ArrayList<>(Arrays.asList(str));
        
        if(myString.endsWith("x")) list.add("");
        answer = new int[list.size()];
        
        for(int i = 0; i < list.size(); i++) {
            answer[i] = list.get(i).length();
            }
            
        return answer;
    }
}

 

다른 정답은 대체로 Stream을 사용했다.

 

 


문자열 잘라서 정렬하기

문자열 myString이 주어집니다. "x"를 기준으로 해당 문자열을 잘라내 배열을 만든 후 사전순으로 정렬한 배열을 return 하는 solution 함수를 완성해 주세요.

단, 빈 문자열은 반환할 배열에 넣지 않습니다.

문제 해설

x로 자른 후 sort하고 return하면 된다. 다만 x로 split하면 빈값이 들어옴에 주의.한다.

 

 

정답

import java.util.Arrays;
import java.util.ArrayList;
class Solution {
    public String[] solution(String myString) {
        
        String[] answer = myString.split("x");
        
        Arrays.sort(answer);
        ArrayList <String> list = new ArrayList<>(Arrays.asList(answer));
        
        list.removeAll(Arrays.asList("",null));
        
        return list.toArray(new String[0]);
    }
}

 

Stream을 사용하면 더 편하긴 하다.

 

다음으로 좋아요를 받은 정답.

import java.util.*;

class Solution {
    public String[] solution(String myString) {
        StringTokenizer st = new StringTokenizer(myString, "x");
        int idx = 0, N = st.countTokens();
        String[] result = new String[N];
        for (int n = 0;n < N;n++)
            result[idx++] = st.nextToken();
        Arrays.sort(result);
        return result;
    }
}

 

split이 아닌 StringTokenizer를 사용했다.

 

StringTokenizer

구분자로 쪼개어 토큰을 만드는 클래스다. 사용하려면 java.util.StringTokenizer를 import해야한다. countTokens()를 통해 현재 남아있는 토큰을 불러오고, nextToken을 통해 다음 토큰(String 타입)을 반환한다.

StringTokenizer는 빈 문자열은 제외하기 때문에 이 방법을 사용한 것으로 보인다.

 

 


간단한 식 계산하기

문자열 binomial이 매개변수로 주어집니다. binomial은 "a op b" 형태의 이항식이고 a와 b는 음이 아닌 정수, op는 '+', '-', '*' 중 하나입니다. 주어진 식을 계산한 정수를 return 하는 solution 함수를 작성해 주세요.

 

문제 해설

split(" ")으로 나누어서 배열을 만들고 op를 만들어 case 처리하면 쉽다.

 

정답

class Solution {
    public int solution(String binomial) {
        int answer = 0;
        String[] math = binomial.split(" ");
        int a = Integer.parseInt(math[0]); 
        int b = Integer.parseInt(math[2]);
        switch(math[1]) {
            case "+" : answer = a + b; break;
            case "*" : answer = a * b; break;
            case "-" : answer = a - b; break;
            }
        
        return answer;
    }
}

 

가장 많이 좋아요를 받은 것과 유사하다.

 


문자열 바꿔서 찾기

문자 "A"와 "B"로 이루어진 문자열 myString과 pat가 주어집니다. myString의 "A"를 "B"로, "B"를 "A"로 바꾼 문자열의 연속하는 부분 문자열 중 pat이 있으면 1을 아니면 0을 return 하는 solution 함수를 완성하세요.

 

문제 해설

바람이 프랑스어 오고 있었다 같은 작업을 많이 해본 사람이라면 이런 류의 replace 방법에 대해서 잘 알고 있을 것이다. 완전히 관계없는 단어 등으로 하나를 치환하고 나머지를 다른 하나로 치환한 뒤, 다시 관계 없는 단어를 치환하면 된다.

 

정답

class Solution {
    public int solution(String myString, String pat) {
        int answer = 0;
        myString = myString.replace("A","C");
        myString = myString.replace("B","A");
        myString = myString.replace("C","B");
        if(myString.indexOf(pat) != -1) return 1;
        
        return answer;
    }
}

 

가장 많은 좋아요를 받은 것은 이것의 축약형에 가깝다.

그리고 계속 contains를 잊어버리게 되는듯… 사용을 습관화하자.

 


rny_string

'm'과 "rn"이 모양이 비슷하게 생긴 점을 활용해 문자열에 장난을 하려고 합니다. 문자열 rny_string이 주어질 때, rny_string의 모든 'm'을 "rn"으로 바꾼 문자열을 return 하는 solution 함수를 작성해 주세요.

 

문제 해설

replace를 사용하면 편하다.

 

정답

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

 

제일 많은 좋아요를 받은 게 All을 사용했는데, 정규식 사용을 위한 방법이라 일반 replace 사용을 추천한다(All을 전부 바꾼다고 생각한 게 아닌가 싶기도…)