View
문자열 my_string과 문자 letter이 매개변수로 주어집니다.
my_string에서 letter를 제거한 문자열을 return하도록 solution 함수를 완성해 주세요.
해당 문제를 봤을 때, 나는 charAt 을 사용해서 my_string 과 letter 문자를 서로 비교해 준 다음, 일치하면 빼 주는 형식으로의 알고리즘을 생각했다.
그런데 이를 식으로 생각하려니 전혀 적히질 않았다. (...)
그래서 구글링을 해 본 결과, 나는 replace 란 메서드를 알 수 있게 되었다. 해당 문제는 이 메서드 하나로 쉽게 풀 수 있는 문제였던 것이다.
class Solution {
public String solution(String my_string, String letter) {
String answer = "";
answer = my_string.replaceAll(letter, "");
return answer;
}
}
replace 를 쓰고 첫 번째 파라미터엔 변경되어야 하는 문자를, 두 번째 파라미터엔 변경하고 싶은 문자를 넣어 준다.
그런데 이때 replace 와 관련된 메서드가 있는데, 이를 알아보자.
🍳 1. replace 메서드
(1) 문자열 내 모든 대상 문자열을 대체한다.
(2) 두 개의 매개변수를 받는다.
answer = my_string.replaceAll("변경되어야 하는 문자열", "변경할 문자열");
🍳 2. replaceFirst 메서드
(1) 문자열 내 첫 번째 대상 문자열만 대체한다.
(2) 두 개의 매개변수를 받는다.
answer = my_string.replaceAll("변경되어야 하는 문자열", "변경할 문자열");
작성되어야 하는 형식은 똑같으나, 제일 첫 번째에 있는 문자만 달라지는 것이 다르다.
예를 들어, Bubbletea 의 b를 t로 대체했다면 (1) 번은 tuttletea 가 되는 것이고,(2) 번은 tubbletea 가 되는 것이다.
🍳 3. replaceAll 메서드
(1) 정규식으로 표현이 가능하다.(2) 두 개의 매개변수를 받는다.
String str = "hello.";
str = str.replace(".", "!");
System.out.println(str); // 결과 : hello!
String str2 = "hello.";
str2 = str2.replaceAll(".", "^^");
System.out.println(str2); // 결과 : ^^^^^^^^^^^^
정규식에서는 .을 모든 문자로 인식하기 때문에, 정규식 표현이 가능한 replaceAll 에서는 모든 문자열이 바뀐다.
만약 정규식을 사용하지 않은 replaceAll 은 replace 메서드와 흡사하다고 보면 된다.
다만, 나는 여기에서 의문이 생겼다. replace 말고 내가 아까 생각한 방식대로 식을 짤 수 있지 않을까? 그래서 다른 문제 풀이를 보았다. (프로그래머스 서* 님 발췌)
class Solution {
public String solution(String my_string, String letter) {
String answer = "";
System.out.println("substring : " + my_string.substring(0, 0));
for (int i = 0; i < my_string.length(); i++) {
if ((my_string.charAt(i) + "").equals(letter)) {
System.out.println("i : " + i);
my_string = my_string.substring(0, i) + my_string.substring(i+1);
i = -1;
}
}
answer = my_string;
return answer;
}
}
해당 풀이로 charAt에 대한 사용 방법을 익힌 것 같다. 감사합니다!
우선 my_string 을 charAt 으로 바꾸어 String 으로 변환해 주는데, 이러면 한 문자씩 파싱이 되었으므로 letter 와 equals 메서드를 써서 비교해 준다. 그리고 substring 은 from~to 에서 to 는 포함되지 않으므로 0, i 까지, i+1 까지 문자를 각각 합쳐 준다. (이러면 letter 와 같은 문자가 배제된다)
다른 방법도 있다.
class Solution {
public String solution(String my_string, String letter) {
String answer = "";
for(int i=0; i<my_string.length(); i++){
if(my_string.charAt(i) != letter.charAt(0)){
answer += my_string.charAt(i);
}
}
return answer;
}
}
이러면 letter 와 일치하지 않는 my_string.charAt(i) 들만 answer 에 더해져 원하는 답이 나오게 된다. 이게 훨씬 쉽다.
그러면 끝!