[알고리즘 - Java] StringBuilder()를 사용한 이유? (가위-바위-보 문제)

박두팔이·2023년 7월 28일
0

알고리즘

목록 보기
8/12

가위 바위 보

문제 설명
가위는 2 바위는 0 보는 5로 표현합니다. 가위 바위 보를 내는 순서대로 나타낸 문자열 rsp가 매개변수로 주어질 때, rsp에 저장된 가위 바위 보를 모두 이기는 경우를 순서대로 나타낸 문자열을 return하도록 solution 함수를 완성해보세요.


제한 사항

  • 0 < rsp의 길이 ≤ 100
  • rsp와 길이가 같은 문자열을 return 합니다.
  • rsp는 숫자 0, 2, 5로 이루어져 있습니다.

입출력 예 설명

  • "205"는 순서대로 가위, 바위, 보이고 이를 모두 이기려면 바위, 보, 가위를 순서대로 내야하므로 “052”를 return합니다.

나의 풀이

class Solution {
    public String solution(String rsp) {
        StringBuilder sb = new StringBuilder();

        for (char repl : rsp.toCharArray()) {
            if (repl == '2') {
                sb.append('0');
            } else if (repl == '0') {
                sb.append('5');
            } else if (repl == '5') {
                sb.append('2');
            }
        }
        
        return sb.toString();
    }
}

StringBuilder()를 사용한 이유?

StringBuilder 클래스 특징

  • 가변적인 크기의 문자열을 저장할 수 있다. 새로운 문자열 추가, 삭제, 특정 위치 문자 삽입 등 효율적인 작업을 수행할 수 있다.
  • 하나의 객체로 문자열을 관리하는 단일 인스턴스이다. 반복적으로 문자열을 덧붙여도 메모리할당과 해제가 발생하지 않는다.
  • 그러나 스레드는 안전하지 않다. 동시 스레드일 경우 접근 및 수정하는 경우 동기화 처리가 필요하다.

💡 스레드(Thread)란?

프로그램의 실행 단위다. 하나의 프로세스 안에서 여러 개의 스레드가 동시에 작업을 수행할 수 있다. 여러스레드를 사용하면 여러 작업을 동시에 처리할 수 있어 효율적이다. 그러나 동시에 값을 변경해야 하는 경우 동기화 문제가 발생할 수 있다. 또한 두 개 이상 스레드가 점유한 자원을 대기하는 상태로 빠지는 데드락 상황이 발생 할 수 있다.

안전한 StringBuffer를 사용하지 않고 StringBuilder를 사용한 이유?

  • StringBuffer와 StringBuilder는 모두 문자열을 가변적으로 처리하는 데 사용되는 클래스라는 점은 기능적인 면에서 비슷하다. 그러나 주요 차이점이 있다.
  • 결론부터 말하면, 단일 스레드 환경에서 StringBuilder가 성능면에서 StringBuffer보다 우수하기 때문이다.
  • 이번 알고리즘과 별개로 동기화를 고려해야하는 상황인지 아닌지, 안전해야 하는지, 멀티스레드가 필요한 상황인지 고려해야한다. 나의경우 단순 알고리즘을 풀기위함이고, 동기화를 고려해야 하는 상황이 아니었다.
  • 따라서 단일 스레드 환경에서 효율적으로 사용할 수 있는 StringBuilder를 사용했다.

profile
기억을 위한 기록 :>

0개의 댓글