| 문제
문자열 my_string과 문자 letter이 매개변수로 주어집니다.
my_string에서 letter를 제거한 문자열을 return 하도록 solution 함수를 완성해 주세요.
| 제한 사항
- 1 ≤ my_string의 길이 ≤ 100
- letter는 길이가 1인 영문자입니다.
- my_string과 letter는 알파벳 대소문자로 이루어져 있습니다.
- 대문자와 소문자를 구분합니다.
| 입출력 예
my_string | letter | result |
"abcdef" | "f" | "abcde" |
"BCBdbe" | "B" | "Cdbe" |
| 힌트
문자열을 통해 해결해야 하는 문제는 일단 문자열을 잘라야 합니다.
문자열을 잘라서 배열에 넣어보세요.
그런 다음 반복문을 통해 잘린 문자열을 StringBuilder로 합쳐보세요.
StringBuilder로 합쳐질 때 letter로 제공된 문자열을 제외하려면 어떻게 해야 할까요?
| 풀이 1
가장 직관적으로 작성된 풀이입니다.
주어진 문자열 my_string을 잘라서 문자열 배열에 넣고
반복문을 통해 조회하면서 StringBuilder에 붙입니다.
이때, StringBuilder에 붙이려는 문자열이
주어진 문자열 letter와 같지 않을 때만 붙이게 조건문을 추가하였지요.
public String solution01(String my_string, String letter) {
StringBuilder sb = new StringBuilder();
for(String s : my_string.split("")){
if(!s.equals(letter)) sb.append(s);
}
return sb.toString();
}
| 풀이 2
""을 기준으로 문자열을 split 하면 단순히 한 글자 한 글자가 배열의 값으로 들어가게 됩니다.
그렇다면 letter를 split의 기준으로 잡으면 어떨까요?
split 메서드의 매개변수로 주어지는 값을 문자열을 자르는 기준으로 삼기 때문에
자연스럽게 my_string에서 letter가 제거됩니다.
public String solution02(String my_string, String letter) {
StringBuilder sb = new StringBuilder();
for(String s : my_string.split(letter)){
sb.append(s);
}
return sb.toString();
}
| 풀이 3
String이 가진 메소드 중에 replace라는 친구가 있습니다.
replace 메서드는 두 개의 매개변수를 필요로 해요.
첫 번째는 바꿀대상이 되는 값, 두 번째는 어떻게 바뀔지를 적으면 되지요.
그래서 첫 번째에 letter, 두 번째에 비어있는 문자열을 넣으면
my_string에서 letter가 제거된 문자열을 도출할 수 있습니다.
public String solution03(String my_string, String letter) {
return my_string.replace(letter,"");
}
| 해설
풀이 1, 풀이 2, 풀이 3 순서대로 평균 0.201, 0.0905, 0.0325ms 정도의 시간이 소요되었습니다.
잘린 문자열을 다시 붙이는 데에 StringBuilder의 append메서드만큼 좋은 방법이 없지만
역시나 문자열 자체로 처리할 수 있는 replace의 성능을 따라잡지는 못하네요.
클래식이 답이라는 것을 다시 한번 느끼게 해주는 문제였습니다.
'개발 > 개발 공부' 카테고리의 다른 글
[프로그래머스] 코딩테스트 입문 : 양꼬치 (0) | 2024.09.09 |
---|---|
[프로그래머스] 코딩테스트 입문 : 각도기 (0) | 2024.09.06 |
[프로그래머스] 코딩테스트 입문 : 문자 반복 출력하기 (4) | 2024.09.04 |
[프로그래머스] 코딩테스트 입문 : 짝수 홀수 개수 (12) | 2024.09.04 |
[프로그래머스] 코딩테스트 입문 : 직각삼각형 출력하기 (별찍기) (2) | 2024.09.03 |
댓글