
프로그래머스에서 낸 코딩 문제에 대한 해답이 들어있습니다.
열람 시 주의해주세요.
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을 전부 바꾼다고 생각한 게 아닌가 싶기도…)
'코테런 > 코딩 기초 트레이닝(완주)' 카테고리의 다른 글
| [코딩 테스트 RUN] 코딩 기초 트레이닝 20일차: 함수(메서드) (0) | 2026.02.25 |
|---|---|
| [코딩 테스트 RUN] 코딩 기초 트레이닝 19일차: 문자열, 리스트(배열) (0) | 2026.02.25 |
| [코딩 테스트 RUN] 코딩 기초 트레이닝 17일차: 문자열 (0) | 2026.02.22 |
| [코딩 테스트 RUN] 코딩 기초 트레이닝 16일차: 문자열 (0) | 2026.02.21 |
| [코딩 테스트 RUN] 코딩 기초 트레이닝 15일차: 리스트(배열), 문자열 (0) | 2026.02.20 |