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 에 더해져 원하는 답이 나오게 된다. 이게 훨씬 쉽다.

 

그러면 끝!

Share Link
reply
«   2025/08   »
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
31