백엔드개발자/알고리즘관련

단어뒤집기/ StringBuilder(), StringBuffer()

보혀니 2021. 10. 9. 18:11

/*
 * N개의 단어가 주어지면 각 단어를 뒤집어 출력하는 프로그램을 작성하세요.
 * 
 * 첫 줄에 자연수 N(3<=N<=20)이 주어집니다. 두 번째 줄부터 N개의 단어가 각 줄에 하나씩 주어집니다. 단어는 영어 알파벳으로만
 * 구성되어 있습니다.
 * 
 * N개의 단어를 입력된 순서대로 한 줄에 하나씩 뒤집어서 출력합니다.
 */

 

 

package com.bo.hyeon;

import java.util.Scanner;

public class Main {
	public String[] solution(int n, String[] str) {
		String[] answer = new String[str.length];
		for (int i = 0; i < str.length; i++) { 
//			String 을 변경하려면 그냥 다다닥 못하고 새로운 객체를 만들어서 변경해야한대 ..
			String tmp = new StringBuilder(str[i]).reverse().toString();
			answer[i] = tmp;
		}
		return answer;
	}

	public static void main(String[] args) {
		Main T = new Main();
		Scanner kb = new Scanner(System.in);
		int n = kb.nextInt();
		String[] str = new String[n];
		for (int i = 0; i < n; i++) {
			str[i] = kb.next();
		}
		for (String x : T.solution(n, str)) {
			System.out.println(x);
		}
	}
}

 

String 은 불변 , 값을 변경할 수 없다 !

String str = a;

str = str.concat("예시에오");

 

str => a   : 값이 할당되어 있던 메모리 영역이 Gabage로 남아있다가 GC(garbage coillection)에 의해 사라짐

str => a예시에오  :기존의  a는 사라지고 'a예이에오' 새로운 메모리 영역

 

문자열 추가,수정,삭제 등이 빈번하게 발생하는 경우에 String 클래스를 사용한다면 힙메모리에 임시가비지가 생성되어 힙메모리 부족으로 성능에 좋지 않은 영향을 미침 !

그럼 어떻게 하냐?

 

StringBuffer나 StringBuilder를 사용, 얘네는 가변성을 가진다

둘의 차이점?

동기화의 유무

StringBuffer 는 동기화를 지원함, 멀티쓰레드 환경에서 안전하다.

StringBuilder 는 동기화 지원안함, 단일쓰레드에서 성능은 StringBuffer보다 뛰어나다.

 

( 멀티쓰레드 단일쓰레드 이게 뭔 소린지 알 수가 없다.... 나중에 찾아볼 것.... )