항해99 온보딩 스터디[Java 언어 기초] 9일차

Hohomi·2023년 3월 16일
0
post-thumbnail

스터디 9일차 : 코딩테스트(Lv.0) 풀기


코테 3일차의 문제들은 대부분 후딱 풀렸음! 문자열 문제였는데 '문자열 뒤집기' 등 메소드를 사용하면 바로 되는 것들이라서, 메소드 검색이 풀이의 8할이었다. 검색하면서 string 관련 메소드들을 많이 보게 됐는데 유용해보이는 것들이 많았다.


🍏 문자열 안에 문자열

문자열 str1 안에 문자열 str2가 있다면 1을, 없다면 2를 리턴하기

class Solution {
    public int solution(String str1, String str2) {
        if (str1.contains(str2)) return 1;
        else return 2;
    }
}

contains 메소드도 짱짱 많이 쓰이는 것 중 하나라고 한다. 나는 너무 당연하게 if-else만 떠올렸는데, 이렇게 true-false 구조가 간결&명확한 경우 삼항연산자를 사용하면 좋다.

class Solution {
    public int solution(String str1, String str2) {
       return (str1.contains(str2) ? 1 : 2);
    }
}

🍏 모음 제거

문자열 my_string에서 알파벳의 모음 a,e,i,o,u를 제거한 문자열을 리턴하기

class Solution {
    public String solution(String my_string) {
        return my_string.replaceAll("[aeiou]", "");
    }
}

문자열을 대체하는 메소드 중 replace와 replaceAll이 있는데 둘의 차이는 이렇다.

  • replace : char를 받음
  • replaceAll : String을 받음

그리고 replaceAll에서는 regex라고 하는 정규표현식이 사용되는데, 그게 아주 많이 쓰인다고 한다. 정규표현식을 직접 쓰기는 어려울 수 있는데, 만들어주는 사이트도 있다고 하니 나중에 참고해보면 좋을 듯 하다.

회원가입 페이지에서 전화번호, 이메일 입력값이 형식에 맞는지를 확인하는 등의 처리를 해야 할 때 많이 쓰이는 메소드라고 한다.


🍏 문자열 뒤집기

문자열 my_string을 거꾸로 뒤집은 문자열을 리턴하기

class Solution {
    public String solution(String my_string) {
        StringBuffer sb = new StringBuffer(my_string);
        String reverseStr = sb.reverse().toString();
        return reverseStr;
    }
}

StringBuffer와 StringBuilder도 문자열에서 많이 쓰이는 메소드라고 한다. 여기서 사용한 reverse뿐만 아니라 다양한 기능을 제공하고 있다.
String은 불변객체라서 하나의 변수에 다른 값을 넣게 되면 그 변수 자체가 변하는 게 아니라 메모리를 차지하는 새로운 문자열이 생성된다. 반면, StringBuilder 같은 경우 문자열을 변경하거나 추가할 때 새로운 오브젝트를 사용하지 않고 그 자리의 값 자체를 변경시키기 때문에 메모리 효율 면에서 string보다 좋다.(StringBuilder에서 문자열을 추가하는 메소드는 append 참고)

단, 주의해야 할 것은 String과 StringBuffer, StringBuilder는 타입이 다르다는 점이다. 그래서 위의 풀이처럼 타입을 일치시켜서 반환해주어야 한다.




참고자료

replace와 replaceAll의 차이

StringBuilder, StringBuffer reverse 사용하기


코딩테스트 출처

프로그래머스

profile
게발로 개발하기

0개의 댓글