์ž๋ฐ”(Java) ์•Œ๊ณ ๋ฆฌ์ฆ˜ ๋ฌธ์ œํ’€์ด ์ž…๋ฌธ 1-4. ๋‹จ์–ด ๋’ค์ง‘๊ธฐ #StringBuilder ๋ฉ”์„œ๋“œ

2024. 7. 5. 15:15ใ†๐ŸŒŠ์•Œ๊ณ ๋ฆฌ์ฆ˜ ํ”ผ๋“œ๋ฐฑ/์ฝ”ํ…Œ ๊ด€๋ จ ๊ฐ•์ขŒ

 

 

-[ํ†ต๊ณผ]

import java.io.*;
public class Main {
    public void solution() throws Exception {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

        int num = Integer.parseInt(br.readLine());  // ์ด ๋ถ€๋ถ„ ์ •๋ฆฌ
        for(int i=0; i< num; i++){
            //StringBuilder ์‚ฌ์šฉ
            String str = br.readLine();
            StringBuilder sb = new StringBuilder();
            for(int j=0; j< str.length();j++){

                sb.append(str.charAt(str.length()-j-1));  //๋ฌธ์ž์—ด ๋’ค์ง‘๊ธฐ
            }
            System.out.println(sb);
        }
    }
    public static void main(String[] args)throws Exception {
        new Main().solution();
    }
}

 

InputStreamReader๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋ฐ”์ดํŠธ ์ŠคํŠธ๋ฆผ์„ ๋ฌธ์ž ์ŠคํŠธ๋ฆผ์œผ๋กœ ๋ณ€ํ™˜ํ•œ๋‹ค.

 

[String vs. StringBuffer vs. StringBuilder ์ •๋ฆฌ]

  • String :  ๋ถˆ๋ณ€(immutable)ํ•œ ๋ฌธ์ž์—ด์„ ์ฒ˜๋ฆฌํ•˜๊ธฐ ์œ„ํ•œ ํด๋ž˜์Šค์ด๋‹ค. ์ฆ‰, String ๊ฐ์ฒด๊ฐ€ ์ƒ์„ฑ๋˜๋ฉด, ๊ทธ ๊ฐ’์€ ๋ณ€๊ฒฝ๋˜์ง€ ์•Š๋Š”๋‹ค! -> ์ƒˆ๋กœ์šด ๊ฐ์ฒด๋กœ ์ถ”๊ฐ€ ๋ฐ ๋ณ€๊ฒฝ๋จ
  • StringBuffer : ๊ฐ€๋ณ€ํ•œ ๋ฌธ์ž์—ด์„ ์ฒ˜๋ฆฌํ•˜๊ธฐ ์œ„ํ•œ ํด๋ž˜์Šค์ด๋‹ค. ์ฆ‰, ์ƒˆ๋กœ์šด ๋ฌธ์ž์—ด์„ ์ถ”๊ฐ€ํ•˜๊ฑฐ๋‚˜ ๋ณ€๊ฒฝํ•˜๋ฉด, ๊ธฐ์กด์˜ ๊ฐ์ฒด๋กœ ์ถ”๊ฐ€ ๋ฐ ๋ณ€๊ฒฝ๋œ๋‹ค
  • StringBuilder :  ๊ฐ€๋ณ€ํ•œ ๋ฌธ์ž์—ด์„ ์ฒ˜๋ฆฌํ•˜๊ธฐ ์œ„ํ•œ ํด๋ž˜์Šค ์ด๋‹ค. StringBuffer์™€ ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ ์ƒˆ๋กœ์šด๋ฌธ์ž์—ด ์ถ”๊ฐ€ ํ•˜๊ฑฐ๋‚˜ ๋ณ€๊ฒฝํ•˜๊ฒŒ ๋˜๋ฉด, ๊ธฐ์กด์˜ ๊ฐ์ฒด๋ฅผ ์ด์šฉํ•˜์—ฌ ์ถ”๊ฐ€ ๋ฐ ๋ณ€๊ฒฝ์ด ๋œ๋‹ค.
    • StringBuffer์™€ ๋‹ค๋ฅด๊ฒŒ ๋ฉ€ํ‹ฐ์“ฐ๋ ˆ๋“œ ํ™˜๊ฒฝ์—์„œ ์•ˆ์ •์ ์ด์ง€ ์•Š์œผ๋ฉฐ, StringBuilder๋Š” ์‹ฑ๊ธ€์“ฐ๋ ˆ๋“œ ํ™˜๊ฒฝ์—์„œ StringBuffer๋ณด๋‹ค ๋” ๋น ๋ฅธ ์„ฑ๋Šฅ์„ ๊ฐ€์ง„๋‹ค

 

-  ๋ถˆ๋ณ€(immutable) ํ•œ ํด๋ž˜์Šค

-> ์ตœ์กฐ ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•œ ๋’ค ์ƒํƒœ๋ฅผ ๋ณ€๊ฒฝํ•  ์ˆ˜ ์—†๋Š” ๊ฒƒ์„ ์˜๋ฏธํ•œ๋‹ค. ์ตœ์ดˆ ์ƒ์„ฑํ•œ ๊ฐ์ฒด์— ์ถ”๊ฐ€๋‚˜ ๋ณ€๊ฒฝ์ด ๋ฐœ์ƒํ•˜๋Š” ๊ฒฝ์šฐ, ์ƒˆ๋กœ์šด ๊ฐ์ฒด๊ฐ€ ๋‹ค์‹œ ์ƒ์„ฑ์ด ๋˜์–ด ๊ตฌ์„ฑ๋œ๋‹ค

-> Java์—์„œ๋Š” String,Float,Double, Long, Short, Byte, Character, BigDecimal, BigInteger ๋“ฑ์˜ ํด๋ž˜์Šค๊ฐ€ ๋ถˆ๋ณ€ ํด๋ž˜์Šค์ด๋‹ค.

 

- ๊ฐ€๋ณ€(mutable) ํ•œ ํด๋ž˜์Šค

-> ์ตœ์ดˆ ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑ ํ•œ ๋’ค, ์ƒํƒœ๋ฅผ ๋ณ€๊ฒฝํ•  ์ˆ˜ ์žˆ๋Š” ๊ฒƒ์„ ์˜๋ฏธํ•œ๋‹ค. ์ตœ์ดˆ ์ƒ์„ฑํ•œ ๊ฐ์ฒด์— ์ถ”๊ฐ€๋‚˜ ๋ณ€๊ฒฝ์ด ๋ฐœ์ƒํ•˜๋Š” ๊ฒฝ์šฐ, ๊ธฐ์กด์˜ ๊ฐ์ฒด์— ์ƒํƒœ๊ฐ€ ๋ณ€๊ฒฝ๋˜์–ด ๊ตฌ์„ฑ๋œ๋‹ค.

-> Java์—๋Š” StringBuffer, StringBuilder, ArrayList, LinkedList, HashMap, HashSet, TreeMap, TreeSet ๋“ฑ์˜ ํด๋ž˜์Šค๊ฐ€ ๊ฐ€๋ณ€ ํด๋ž˜์Šค์— ์†ํ•œ๋‹ค.

 

- ์‹ฑ๊ธ€ ์“ฐ๋ ˆ๋“œ 

-> ํ•˜๋‚˜์˜ ์ฝ”๋“œ ๋ธ”๋ก์„ ์‹คํ–‰ํ•˜๋Š” ๋™์•ˆ ๋‹ค๋ฅธ ์ฝ”๋“œ ๋ธ”๋ก์ด ์‹คํ–‰๋˜์ง€ ์•Š๋Š” ๊ฒฝ์šฐ์ด๋‹ค. ์ฆ‰, ๋™์‹œ์— ํ•˜๋‚˜์˜ ์ž‘์—…๋งŒ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ๋‹ค

 

- ๋ฉ€ํ‹ฐ์“ฐ๋ ˆ๋“œ 

->๋‘ ๊ฐœ ์ด์ƒ์˜ ์“ฐ๋ ˆ๋“œ๊ฐ€ ๋™์‹œ์— ์‹คํ–‰๋˜๋Š” ๊ฒƒ์„ ๋งํ•œ๋‹ค. ์—ฌ๋Ÿฌ ๊ฐœ์˜ ์ฝ”๋“œ ๋ธ”๋ก์ด ๋™์‹œ์— ์‹คํ–‰๋  ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ ,๋ฉ€ํ‹ฐ์“ฐ๋ ˆ๋“œ ํ™˜๊ฒฝ์—์„œ๋Š” ๋™๊ธฐํ™”(SynChronization)๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ, ์ด๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด ๋ฝ(lock)๊ณผ ์–ธ๋ฝ(unlock) ๋ฉ”์ปค๋‹ˆ์ฆ˜์ด ์‚ฌ์šฉ๋œ๋‹ค.

 

์ฐจ์ด์  String StringBuffer StringBuilder
์„ ์–ธ ๋ฐฉ์‹ String str = "Hello"; StringBuffer sb = new StringBuffer("Hello"); StringBuilder sb = new StringBuilder("Hello");
๋ฌธ์ž์—ด ๋ณ€๊ฒฝ ๋ฐฉ๋ฒ• str += "World"; sb.append("World"); sb.append("World");
ํด๋ž˜์Šค ์ข…๋ฅ˜ ๋ถˆ๋ณ€(immutable)ํ•œ ํด๋ž˜์Šค ๊ฐ€๋ณ€(mutable)ํ•œ ํด๋ž˜์Šค ๊ฐ€๋ณ€(mutable)ํ•œ ํด๋ž˜์Šค
๋ณ€์ˆ˜์˜ ์ถ”๊ฐ€ ๋ฐ ๋ณ€๊ฒฝ ์‹œ
๋ฉ”๋ชจ๋ฆฌ ์„ฑ๋Šฅ
๋ถˆ๋ฆฌํ•จ ์œ ๋ฆฌํ•จ ์œ ๋ฆฌํ•จ
๋‹จ์ผ ์“ฐ๋ ˆ๋“œ ํ™˜๊ฒฝ์—์„œ ์„ฑ๋Šฅ ์•ˆ์ •์  ์•ˆ์ •์  ์•ˆ์ •์ 
๋ฉ€ํ‹ฐ ์“ฐ๋ ˆ๋“œ ํ™˜๊ฒฝ์—์„œ ์„ฑ๋Šฅ ์•ˆ์ •์  ์•ˆ์ •์ , ๋™๊ธฐํ™” ๊ณผ์ •์—์„œ ์„ฑ๋Šฅ ์ €ํ•˜ ์•ˆ์ •์ , ๋™๊ธฐํ™” ๊ณผ์ •์—์„œ ์„ฑ๋Šฅ์ €ํ•˜x
์†๋„ ๋งค์šฐ ๋А๋ฆผ ๋น ๋ฆ„ ๋น ๋ฆ„
์‚ฌ์šฉ๋ชฉ์  ๋ฌธ์ž์—ด ์ถ”๊ฐ€์™€ ๋ณ€๊ฒฝ์ด ๋ฐœ์ƒํ•˜์ง€ ์•Š๋Š” ๊ฒฝ์šฐ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ์ข‹๋‹ค ๋ฉ€ํ‹ฐ์“ฐ๋ ˆ๋“œ ํ™˜๊ฒฝ์—์„œ ๋ฌธ์ž์—ด์˜ ๋ณ€์ˆ˜์˜ ์ถ”๊ฐ€์™€ ๋ณ€๊ฒฝ์ด ์ž์ฃผ ๋ฐœ์ƒํ•˜๋Š” ๊ฒฝ์šฐ ์‚ฌ์šฉํ•˜๋ฉด ์ข‹๋‹ค. ๋‹จ์ผ ์“ฐ๋ ˆ๋“œ ํ™˜๊ฒฝ์—์„œ ๋ฌธ์ž์—ด์˜ ๋ณ€์ˆ˜์˜ ์ถ”๊ฐ€์™€ ๋ณ€๊ฒฝ์ด ์ž์ฃผ ๋ฐœ์ƒํ•˜๋Š” ๊ฒฝ์šฐ ์‚ฌ์šฉํ•˜๋ฉด ์ข‹๋‹ค.

 

 

[String -> StirngBuffer/ StirngBuilder ํƒ€์ž…์œผ๋กœ ๋ณ€๊ฒฝ ๋ฐฉ๋ฒ•]

String str = "Hello World";

//String to StringBuffer 
StringBuffer strToSb1 = new StringBuffer(str1);

//String to StringBuilder
StringBuilder strToSb2 = new StringBuilder(str1);

 

 

 

[StringBuffer -> String ๋ณ€ํ™˜ ๋ฐฉ๋ฒ•] -> String.valueOf() , .toString()

//StringBuffer
StringBuilder sb3 = new StringBuffer("Hello World");

//StringBuffer To String
String str3 = String.valueOf(sb3)

//StringBuilder
StringBuilder sb = new StringBuilder("Hello World");

//StringBuilder To String
String str4 = String.valueOf(sb4);

 

 

[StringBuilder ์˜ ๋ฉ”์„œ๋“œ]

๋ฉ”์„œ๋“œ ๋ฐ˜ํ™˜ ํƒ€์ž… ์„ค๋ช…
.append()

-> String, char[] , Object, boolean, char,int, long, float, double ๋“ฑ ์—ฐ๊ฒฐ ๊ฐ€๋Šฅ
StringBuilder ๊ฐ’์„ ์—ฐ๊ฒฐ
.appendCodePoint(int codePoint) StringBuilder ์œ ๋‹ˆ์ฝ”๋“œ ์ฝ”๋“œ ํฌ์ธํŠธ๋ฅผ ๋ง๋ถ™์ธ๋‹ค
.delete(int start , int end) StringBuilder ์ง€์ •๋œ ๋ฒ”์œ„์˜ ๋ฌธ์ž๋ฅผ ์‚ญ์ œ
.deletedCharAt(int index)  StringBuilder ์ง€์ •๋œ ์œ„์น˜์˜ ๋ฌธ์ž๋ฅผ ์‚ญ์ œ
.insert(int offset, String str) StringBuilder ๋ฌธ์ž์—ด์„ ์‚ฝ์ž…ํ•œ๋‹ค.
.insert(int offset, char[] str) StringBuilder ๋ฌธ์ž ๋ฐฐ์—ด์„ ์‚ฝ์ž…ํ•œ๋‹ค
.reverse() StringBuilder ๋ฌธ์ž์—ด์„ ๋’ค์ง‘๋Š”๋‹ค
.replace(int start, int end, String str) StringBuilder ์ง€์ •๋œ ๋ฒ”์œ„์˜ ๋ฌธ์ž๋ฅผ ์ƒˆ ๋ฌธ์ž์—ด๋กœ ๋Œ€์ฒดํ•œ๋‹ค
.setCharAt(int index, char ch) void ์ง€์ •๋œ ์œ„์น˜์˜ ๋ฌธ์ž๋ฅผ ์„ค์ •ํ•œ๋‹ค
.setLength(int newLength) void ๋ฌธ์ž์—ด์˜ ๊ธธ์ด๋ฅผ ์„ค์ •ํ•œ๋‹ค
.substring(int start) String ์ง€์ •๋œ ์‹œ์ž‘ ์œ„์น˜๋ถ€ํ„ฐ ๋ฌธ์ž์—ด ๋๊นŒ์ง€ ๋ฐ˜ํ™˜ํ•œ๋‹ค
.substring(int start , int end) String ์ง€์ •๋œ ๋ฒ”์œ„์˜ ๋ฌธ์ž์—ด์„ ๋ฐ˜ํ™˜ํ•œ๋‹ค
.trimToSize() void ์ €์žฅ๋œ ๋ฌธ์ž์—ด์˜ ๊ธธ์ด์— ๋”ฐ๋ผ ๋ฒ„ํผ ํฌ๊ธฐ๋ฅผ ์กฐ์ •ํ•œ

 

 

[๊ฐ•์ขŒ์—์„œ ์ œ์‹œํ•œ ํ’€์ด]

=>  .reverse() ๋ฉ”์„œ๋“œ ํ™œ์šฉ

 

class Main {
    public ArrayList<String> solution(int n,String[] str){
        ArrayList<String> answer = new ArrayList<>();
        for(String x : str){
            String tmp = new StringBuilder(x).reverse().toString();
            answer.add(tmp);
        }
        return answer;
    }
    public static void main(String[] args) throws Exception{
        Main T = new Main();
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        int n = Integer.parseInt(br.readLine());
        String[] str = new String[n];
        for(int i=0;i<n;i++){
            str[i]= br.readLine();
        }
        for(String x : T.solution(n,str)){
            System.out.println(x);
        }
    }
}

 

 

 

 

 


https://adjh54.tistory.com/129#3)%20String%20to%20StringBuffer%2C%20StringBuilder%20%2F%20StringBuffer%2C%20StringBuilder%20to%20String-1

 

[Java] String, StringBuffer, StringBuilder ์ดํ•ดํ•˜๊ธฐ

ํ•ด๋‹น ํŽ˜์ด์ง€์—์„œ๋Š” String๊ณผ StringBuffer, StringBuilder์— ๋Œ€ํ•ด์„œ ์ดํ•ดํ•˜๊ณ  ๊ฐ๊ฐ์˜ ์ฐจ์ด์ ๊ณผ ์–ธ์ œ ์‚ฌ์šฉํ•ด์•ผ ํ•˜๋Š”์ง€์— ๋Œ€ํ•ด ์ดํ•ดํ•˜๊ธฐ ์œ„ํ•œ ๊ธ€์ž…๋‹ˆ๋‹ค. 1) String, StringBuffer, StringBuilder ๐Ÿ’ก String์ด๋ž€? - Java์—

adjh54.tistory.com

[์ถœ์ฒ˜]