백엔드개발자/알고리즘관련
단어뒤집기/ 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보다 뛰어나다.
( 멀티쓰레드 단일쓰레드 이게 뭔 소린지 알 수가 없다.... 나중에 찾아볼 것.... )