l로 만들기

nacSeo (낙서)·2024년 3월 25일
0

프로그래머스

목록 보기
133/169

문제 설명

알파벳 소문자로 이루어진 문자열 myString이 주어집니다. 알파벳 순서에서 "l"보다 앞서는 모든 문자를 "l"로 바꾼 문자열을 return 하는 solution 함수를 완성해 주세요.

제한사항

1 ≤ myString ≤ 100,000
myString은 알파벳 소문자로 이루어진 문자열입니다.

나의 코드

  • 첫 번째 코드
class Solution {
    public String solution(String myString) {
        for(int i=0; i<myString.length(); i++) {
            if(myString.charAt(i)<'l') {
                myString.replace(myString.charAt(i), 'l');
            }
        }
        return myString;
    }
}

myString을 반복문을 통해 돌면서 myString.charAt(i)l보다 작을 때, replace()함수를 사용하여 l로 대체하는 코드를 짰으나 실패

  • 최종 코드
class Solution {
    public String solution(String myString) {
        StringBuilder sb = new StringBuilder(myString);
        for(int i=0; i<sb.length(); i++) {
            if(sb.charAt(i)<'l') {
                sb.setCharAt(i, 'l');
            }
        }
        return sb.toString();
    }
}

앞서 실패한 이유는 String클래스는 불변하기 때문! 따라서 StringBuilder를 사용하여 해결

다른 사람 코드

class Solution {
    public String solution(String myString) {
        return myString.replaceAll("[^l-z]", "l");
    }
}

정규표현식replaceAll() 메소드 활용

class Solution {
    public String solution(String myString) {
        String answer = "";

        for (int i = 0; i < myString.length(); i++) {
            if (myString.charAt(i) <= 'l') {
                answer += "l";
            } else {
                answer += myString.charAt(i) + "";
            }
        }
        return answer;
    }
}

StringBuilder대신 String을 사용하려면 직접 새로운 String을 선언하여 myString을 돌며 l보다 작은 부분은 l로, 나머지 부분은 그대로 추가해줘야함.

느낀 점

String은 고정된 길이이고, 불변(객체 변경 시 실제로 변경되는 게 아니라 새로운 String객체가 생성됨)의 특징을 생각안하고 첫 번째 코드를 짰다 😅 다시 한 번 내가 관련하여 블로깅한 내용을 복습하고 StringBuilder활용도 손에 익혀야겠다.
추가적으로 정규표현식에 관해서도 다 외울 순 없지만, 특징들을 기억하고 있으면 이와 유사한 문제들도 쉽게 풀 수 있을 것 같다.

profile
백엔드 개발자 김창하입니다 🙇‍♂️

0개의 댓글