Day 18 문자열
Day18 18단계 20231107
1. x 사이의 개수
- 내 풀이 : myString을 split("x")로 배열화 시킨 후 각 String 요소들의 크기를 int 배열에 넣었다. 다만 myString이 "x"로 끝나면 마지막 위치의 공백이 int 배열에 포함되지 않아서 추가로 배열 길이를 설정해주었다.
- 다른 사람의 풀이를 보니 split(String regex) 대신 split(String regex, int limit)를 설정하면 훨씬 간결해진다.
import java.util.*;
class Solution {
public int[] solution(String myString) {
String[] str = myString.split("x");
int[] answer;
if (myString.endsWith("x")) {
answer = new int[str.length+1];
answer[str.length] = 0;
} else {
answer = new int[str.length];
}
for(int i = 0; i < str.length; i++) {
answer[i] = str[i].length();
}
return answer;
}
}
- 다른 사람 풀이 : Stream에서 myString을 split할 때 split(String regex) 대신 split(String regex, int limit)을 사용해서 myString이 x로 끝나 myString 맨 뒤의 길이가 0인 부분까지도 split하도록 설정했다.
- String 클래스 메소드 참고
- split(String regex, int limit) : 위의 split()에서 최대 분할 수 limit을 양수로 설정하면 limit의 수만큼 분할, 음수라면 가능한 모든 위치에서 분할
return Arrays.stream(myString.split("x", myString.length())).mapToInt(s -> s.length()).toArray(); // 또는 limit을 -1로 설정
2. 문자열 잘라서 정렬하기
- 내 풀이 : myString을 split("x")로 배열화 시킨 것을 stream으로 변환하고, s.equals("")로 빈 문자열을 제거한 후 sorted()를 사용해 정렬했다.
import java.util.*;
class Solution {
public String[] solution(String myString) {
return Arrays.stream(myString.split("x")).filter(s -> !s.equalsnew;
}
}
- 다른 사람 풀이 : filter()에서 조건을 넣을 때 filter(s -> s.length()>0), 또는 filter(s -> !s.isEmpty())를 사용해 공백 문자열을 제거했다.
3. 간단한 식 계산하기
- 내 풀이 : binomial을 split(" ")으로 배열화 시킨 다음, 배열의 1번 위치에는 항상 연산자가 있기 때문에 switch문을 사용하여 각 연산자별 상황에 따라 두 정수를 계산했다.
class Solution {
public int solution(String binomial) {
int answer = 0;
String[] str = binomial.split(" ");
switch (str[1]) {
case "+":
answer = Integer.parseInt(str[0]) + Integer.parseInt(str[2]);
break;
case "-":
answer = Integer.parseInt(str[0]) - Integer.parseInt(str[2]);
break;
case "*":
answer = Integer.parseInt(str[0]) * Integer.parseInt(str[2]);
break;
}
return answer;
}
}
- 다른 사람 풀이 : switch 대신 if문을 사용하거나, answer 대신 Integer.parseInt(str[0]) += Integer.parseInt(str[2])처럼 축약형으로 작성해서 더 깔끔한 풀이도 있었다.
4. 문자열 바꿔서 찾기
- 내 풀이 : StringBuilder를 사용해서 myString의 각 char에 대해 'A'라면 "B"를, 'B'라면 "A"를 저장한 후 contains(pat)으로 pat이 있는지 확인한다.
class Solution {
public int solution(String myString, String pat) {
StringBuilder sb = new StringBuilder();
for(int i = 0; i < myString.length(); i++) {
if (myString.charAt(i) == 'A') {
sb.append("B");
} else {
sb.append("A");
}
}
return (sb.toString().contains(pat)) ? 1 : 0;
}
}
- 다른 사람 풀이 : myString에서 "A"를 "a"로, "B"를 "A"로, "a"를 "B"로 바꾸어 한 번 변환해둔 A가 다시 B로 바뀌는 일이 없도록 설정했다.