Coding Test

ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค - 133502 : ํ–„๋ฒ„๊ฑฐ ๋งŒ๋“ค๊ธฐ (์‹œ๊ฐ„ ์ดˆ๊ณผ , String ์˜ replace, + ์—ฐ์‚ฐ์— ๋Œ€ํ•œ ๊ณ ์ฐฐ) ํ’€์ด ๋ฐ ๋ฆฌ๋งˆ์ธ๋”ฉ

ํ”„๋กœ๊ทธ๋ž˜๋จธ ์˜ค์›” 2023. 9. 27.

๐Ÿ”ํ–„๋ฒ„๊ฑฐ ๋งŒ๋“ค๊ธฐ

 

https://school.programmers.co.kr/learn/courses/30/lessons/133502

 

ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค

์ฝ”๋“œ ์ค‘์‹ฌ์˜ ๊ฐœ๋ฐœ์ž ์ฑ„์šฉ. ์Šคํƒ ๊ธฐ๋ฐ˜์˜ ํฌ์ง€์…˜ ๋งค์นญ. ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค์˜ ๊ฐœ๋ฐœ์ž ๋งž์ถคํ˜• ํ”„๋กœํ•„์„ ๋“ฑ๋กํ•˜๊ณ , ๋‚˜์™€ ๊ธฐ์ˆ  ๊ถํ•ฉ์ด ์ž˜ ๋งž๋Š” ๊ธฐ์—…๋“ค์„ ๋งค์นญ ๋ฐ›์œผ์„ธ์š”.

programmers.co.kr

 

โœ”๏ธ๋ฌธ์ œ ์„ค๋ช…


ํ–„๋ฒ„๊ฑฐ ๊ฐ€๊ฒŒ์—์„œ ์ผ์„ ํ•˜๋Š” ์ƒ์ˆ˜๋Š” ํ–„๋ฒ„๊ฑฐ๋ฅผ ํฌ์žฅํ•˜๋Š” ์ผ์„ ํ•ฉ๋‹ˆ๋‹ค. ํ•จ๊ป˜ ์ผ์„ ํ•˜๋Š” ๋‹ค๋ฅธ ์ง์›๋“ค์ด ํ–„๋ฒ„๊ฑฐ์— ๋“ค์–ด๊ฐˆ ์žฌ๋ฃŒ๋ฅผ ์กฐ๋ฆฌํ•ด ์ฃผ๋ฉด ์กฐ๋ฆฌ๋œ ์ˆœ์„œ๋Œ€๋กœ ์ƒ์ˆ˜์˜ ์•ž์— ์•„๋ž˜์„œ๋ถ€ํ„ฐ ์œ„๋กœ ์Œ“์ด๊ฒŒ ๋˜๊ณ , ์ƒ์ˆ˜๋Š” ์ˆœ์„œ์— ๋งž๊ฒŒ ์Œ“์—ฌ์„œ ์™„์„ฑ๋œ ํ–„๋ฒ„๊ฑฐ๋ฅผ ๋”ฐ๋กœ ์˜ฎ๊ฒจ ํฌ์žฅ์„ ํ•˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค. ์ƒ์ˆ˜๊ฐ€ ์ผํ•˜๋Š” ๊ฐ€๊ฒŒ๋Š” ์ •ํ•ด์ง„ ์ˆœ์„œ(์•„๋ž˜์„œ๋ถ€ํ„ฐ, ๋นต – ์•ผ์ฑ„ – ๊ณ ๊ธฐ - ๋นต)๋กœ ์Œ“์ธ ํ–„๋ฒ„๊ฑฐ๋งŒ ํฌ์žฅ์„ ํ•ฉ๋‹ˆ๋‹ค. ์ƒ์ˆ˜๋Š” ์†์ด ๊ต‰์žฅํžˆ ๋น ๋ฅด๊ธฐ ๋•Œ๋ฌธ์— ์ƒ์ˆ˜๊ฐ€ ํฌ์žฅํ•˜๋Š” ๋™์•ˆ ์† ์žฌ๋ฃŒ๊ฐ€ ์ถ”๊ฐ€์ ์œผ๋กœ ๋“ค์–ด์˜ค๋Š” ์ผ์€ ์—†์œผ๋ฉฐ, ์žฌ๋ฃŒ์˜ ๋†’์ด๋Š” ๋ฌด์‹œํ•˜์—ฌ ์žฌ๋ฃŒ๊ฐ€ ๋†’์ด ์Œ“์—ฌ์„œ ์ผ์ด ํž˜๋“ค์–ด์ง€๋Š” ๊ฒฝ์šฐ๋Š” ์—†์Šต๋‹ˆ๋‹ค.

์˜ˆ๋ฅผ ๋“ค์–ด, ์ƒ์ˆ˜์˜ ์•ž์— ์Œ“์ด๋Š” ์žฌ๋ฃŒ์˜ ์ˆœ์„œ๊ฐ€ [์•ผ์ฑ„, ๋นต, ๋นต, ์•ผ์ฑ„, ๊ณ ๊ธฐ, ๋นต, ์•ผ์ฑ„, ๊ณ ๊ธฐ, ๋นต]์ผ ๋•Œ, ์ƒ์ˆ˜๋Š” ์—ฌ์„ฏ ๋ฒˆ์งธ ์žฌ๋ฃŒ๊ฐ€ ์Œ“์˜€์„ ๋•Œ, ์„ธ ๋ฒˆ์งธ ์žฌ๋ฃŒ๋ถ€ํ„ฐ ์—ฌ์„ฏ ๋ฒˆ์งธ ์žฌ๋ฃŒ๋ฅผ ์ด์šฉํ•˜์—ฌ ํ–„๋ฒ„๊ฑฐ๋ฅผ ํฌ์žฅํ•˜๊ณ , ์•„ํ™‰ ๋ฒˆ์งธ ์žฌ๋ฃŒ๊ฐ€ ์Œ“์˜€์„ ๋•Œ, ๋‘ ๋ฒˆ์งธ ์žฌ๋ฃŒ์™€ ์ผ๊ณฑ ๋ฒˆ์งธ ์žฌ๋ฃŒ๋ถ€ํ„ฐ ์•„ํ™‰ ๋ฒˆ์งธ ์žฌ๋ฃŒ๋ฅผ ์ด์šฉํ•˜์—ฌ ํ–„๋ฒ„๊ฑฐ๋ฅผ ํฌ์žฅํ•ฉ๋‹ˆ๋‹ค. ์ฆ‰, 2๊ฐœ์˜ ํ–„๋ฒ„๊ฑฐ๋ฅผ ํฌ์žฅํ•˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.

์ƒ์ˆ˜์—๊ฒŒ ์ „ํ•ด์ง€๋Š” ์žฌ๋ฃŒ์˜ ์ •๋ณด๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š” ์ •์ˆ˜ ๋ฐฐ์—ด ingredient๊ฐ€ ์ฃผ์–ด์กŒ์„ ๋•Œ, ์ƒ์ˆ˜๊ฐ€ ํฌ์žฅํ•˜๋Š” ํ–„๋ฒ„๊ฑฐ์˜ ๊ฐœ์ˆ˜๋ฅผ return ํ•˜๋„๋ก solution ํ•จ์ˆ˜๋ฅผ ์™„์„ฑํ•˜์‹œ์˜ค.

 

โœ”๏ธ์ œํ•œ์‚ฌํ•ญ

1 ≤ ingredient์˜ ๊ธธ์ด ≤ 1,000,000
ingredient์˜ ์›์†Œ๋Š” 1, 2, 3 ์ค‘ ํ•˜๋‚˜์˜ ๊ฐ’์ด๋ฉฐ, ์ˆœ์„œ๋Œ€๋กœ ๋นต, ์•ผ์ฑ„, ๊ณ ๊ธฐ๋ฅผ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค.

 

 

โœ”๏ธ์ž…์ถœ๋ ฅ ์˜ˆ

ingredien result
[2, 1, 1, 2, 3, 1, 2, 3, 1]
[1, 3, 2, 1, 2, 1, 3, 1, 2]  0

 

โœ”๏ธ์ž…์ถœ๋ ฅ ์˜ˆ ์„ค๋ช…

  • ์ž…์ถœ๋ ฅ ์˜ˆ #1
    ๋ฌธ์ œ ์˜ˆ์‹œ์™€ ๊ฐ™์Šต๋‹ˆ๋‹ค.

 

  • ์ž…์ถœ๋ ฅ ์˜ˆ #2
    ์ƒ์ˆ˜๊ฐ€ ํฌ์žฅํ•  ์ˆ˜ ์žˆ๋Š” ํ–„๋ฒ„๊ฑฐ๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค.

 


๐Ÿ“ํ’€์ด ๋ฐ ๋ฆฌ๋งˆ์ธ๋”ฉ(์Šคํฌ์ฃผ์˜)

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
public class LS_133502 {
    public int solution(int[] ingredient) {
        int answer = 0;
        StringBuilder sb = new StringBuilder();
        for (int j : ingredient) {
            sb.append(j);
            if (sb.length() > 3 && sb.subSequence(sb.length() - 4, sb.length()).equals("1231")) {
                answer++;
                sb.delete(sb.length() - 4, sb.length());
            }
        }
        return answer;
    }
 
    public int solution2(int[] ingredient) {
        int answer = 0;
        StringBuilder sb = new StringBuilder();
        for (int i = 0; i < ingredient.length; i++) {
            sb.append(ingredient[i]);
        }
        String str = sb.toString();
        while(str.contains("1231")){
            str = str.replaceFirst("1231","");
            answer++;
        }
        return answer;
    }
}
cs

 

์œ„์˜ solution() ์€ ๋งž์€ ํ’€์ด solution2()์€ ํ‹€๋ฆฐ ํ’€์ด์ด๋‹ค.

 

 

 

โŒํ‹€๋ฆฐ ํ’€์ด ๊ฒฐ๊ณผ 

ํ…Œ์ผ€ 12๋ฒˆ์—์„œ ์ƒ์ˆ˜ ํ–„๋ฒ„๊ฑฐ ์Œ“๋‹ค๊ฐ€ ๊ณจ๋ณ‘๋‚ฌ๋‹ค๋Š”...์ฐ์ด ์žˆ๋‹ค.... ์šฐ๋ฆฌ๊ฐ€ ์ด๋ ‡๊ฒŒ ๋งŒ๋“ค์—ˆ๋‹ค....... ๋œ ํž˜๋“ค๊ฒŒ ํ•ด์ฃผ์ž......ใ…œ,ใ…œ

 

โญ•๋งž์€ ํ’€์ด ๊ฒฐ๊ณผ

 

ํ‹€๋ฆฐ ํ’€์ด์™€ ๋งž์€ ํ’€์ด์˜ ์‹œ๊ฐ„ ์ฐจ์ด๋ฅผ ๋ณด๋ฉด ์••๋„์ ์ธ ์‹œ๊ฐ„ ์ฐจ์ด๊ฐ€ ์žˆ๋‹ค๋Š” ๊ฑธ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค.

 

 

๐Ÿ”‘ํ•ด์„ค

 

๋ฌธ์ œ๋ฅผ ๋ณด์ž๋งˆ์ž ๋ฐฐ์—ด์„ ๋ฌธ์ž์—ด๋กœ ๋ฐ”๊ฟ”์„œ subString ์ด ์žˆ๋Š”์ง€ ํ™•์ธํ•˜๋ฉด ๋  ๊ฑฐ๋ผ ์ƒ๊ฐํ–ˆ๋‹ค. 

์ด๋•Œ String ๊ทธ์ž์ฒด๋ฅผ ๋‹ค๋ฃจ๋Š” ๊ฒŒ ์•„๋‹ˆ๋ผ StringBuilder ๋กœ์„œ ๋‹ค๋ค„์•ผํ•˜๋Š”๋ฐ, ์ด ์‚ฌ์‹ค์„ ์•Œ๊ณ  ๋ฌธ์ œ๋ฅผ ํ’€์—ˆ์ง€๋งŒ ๋งŽ์€ ์‚ฌ๋žŒ๋“ค์ด ์ž˜ ๋ชจ๋ฅด๋Š” ๊ฑฐ ๊ฐ™์•„ ๊ธ€๋„ ์“ธ๊ฒธ ๋ฆฌ๋งˆ์ธ๋”ฉํ• ๊ฒธ ์ž‘์„ฑํ•ด ๋ณด์•˜๋‹ค.

 

๋งŽ์ด๋“ค ํ‘ธ๋Š” ๋ฐฉ๋ฒ•์ด 

[2, 1, 1, 2, 3, 1, 2, 3, 1] ์˜ ๋ฐฐ์—ด์ด ์ฃผ์–ด ์ง„๋‹ค๋ฉด "211231231" ๋กœ ๋ฌธ์ž์—ด์„ ๋งŒ๋“ค๊ณ  ์ด์–ด์ง„ "1231"์„ ๊ณต๋ฐฑ์œผ๋กœ replace ์‹œ์ผœ ๊ทธ ํšŸ์ˆ˜๋ฅผ ์นด์šดํŠธ ํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ๋– ์˜ฌ๋ ธ์„ ๊ฒƒ์ด๋‹ค.

๋ฐฉ๋ฒ•๋ก  ์ ์œผ๋ก  ๋งž์ง€๋งŒ String ์œผ๋กœ ๋กœ์ง์„ ๋‹ค๋ฃฌ๋‹ค๋ฉด ์‹œ๊ฐ„ ์ดˆ๊ณผ๊ฐ€ ๋‚  ๊ฒƒ์ด๋‹ค.

 

 

์šฐ๋ฆฌ๋Š” String ํด๋ž˜์Šค์˜ ํŠน์ง•์„ ์•Œ์•„์•ผํ•œ๋‹ค.

ํŠนํžˆ๋‚˜ String ์—์„œ += ๋˜๋Š” + ์—ฐ์‚ฐ์„ ์ง€์–‘ ํ•ด์•ผํ•œ๋‹ค.

 

String str = "1";
str += "2";
str += "3";
str += "4";

์œ„ ์™€ ๊ฐ™์ด ์—ฐ์‚ฐ์„ ํ•œ๋‹ค๋ฉด ํ•œ ๋ฌธ์ž์—ด์— 1234 ๊ฐ€ ํ•ฉ์ณ์ง€ ๋ฌธ์ž์—ด์ด ๋˜๋Š”๊ฒŒ ์•„๋‹ˆ๋ผ + ์—ฐ์‚ฐ ํ• ๋•Œ๋งˆ๋‹ค ์ƒˆ๋กœ์šด ๊ฐ์ฒด๋ฅผ ๋งŒ๋“ค์–ด์„œ ์—ฐ์‚ฐ์„ ์ˆ˜ํ–‰ํ•˜๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.

Constant Pool์—์„œ๋Š” ๊ธฐ์กด์˜ ๋ฐ์ดํ„ฐ์˜ ๋ณ€๊ฒฝ์ด ์•„๋‹Œ ์ƒˆ๋กœ์šด ๋ฆฌํ„ฐ๋Ÿด์˜ ์ถ”๊ฐ€๊ฐ€ ๊ณ„์†ํ•ด์„œ ์ด๋ฃจ์–ด ์ง„๋‹ค.

์œ„์˜ ์ฝ”๋“œ์˜ ๊ฒฝ์šฐ, "1" , "12" , "123" , "1234"๊ฐ€ ๊ฐ๊ฐ String Constant Pool์— ์ƒˆ๋กœ์šด ๋ฆฌํ„ฐ๋Ÿด๋กœ ์ €์žฅ๋˜๋ฉฐ ์•„๋ฌด๋„ ์ฐธ์กฐํ•˜์ง€ ์•Š์€ ๋ฆฌํ„ฐ๋Ÿด์€ GC๊ฐ€ ํšŒ์ˆ˜ํ•ด ๊ฐ€๋Š” ๊ณผ์ •์„ ๊ฑฐ์น˜๊ฒŒ ๋œ๋‹ค.

 

์ด๋Ÿฌํ•œ ๊ณผ์ •์€ ์„ฑ๋Šฅ ์ €ํ•˜์˜ ์›์ธ์ด ๋œ๋‹ค.

 

 

๐Ÿค”์–ด๋Š ๋ถ€๋ถ„์—์„œ ์„ฑ๋Šฅ์ด ๋–จ์–ด์ง„๋‹ค๋Š” ๊ฒƒ์ผ๊นŒ?

 

์„ฑ๋Šฅ์„ ๋”ฐ์งˆ๋•Œ๋Š” ํ•ญ์ƒ ์‹œ๊ฐ„๋ณต์žก๋„๋‚˜ ๊ณต๊ฐ„๋ณต์žก๋„๋ฅผ ๋”ฐ์ ธ์•ผ ํ•œ๋‹ค.

๊ฒฐ๋ก ๋งŒ ๋งํ•˜์ž๋ฉด Java์—์„œ String์˜ '+=' ๋˜๋Š” '+' ์—ฐ์‚ฐ์˜ ๊ฒฝ์šฐ ์˜ ์‹œ๊ฐ„๋ณต์žก๋„๋ฅผ ๊ฐ€์ง„๋‹ค.

N์€ ๊ธฐ์กด์˜ ๋ฌธ์ž์—ด(lhs)์˜ ๊ธธ์ด, K๋Š” ๋”ํ•˜๋ ค๊ณ  ํ•˜๋Š” ๋ฌธ์ž์—ด(rhs)์˜ ๊ธธ์ด๋‹ค.

 

์•„๋ž˜์˜ ์ฝ”๋“œ๋ฅผ ์˜ˆ์‹œ๋กœ ์—ฐ์‚ฐํšŸ์ˆ˜์— ๋Œ€ํ•œ ์‹œ๊ฐ„๋ณต์žก๋„๋ฅผ ๊ณ„์‚ฐํ•ด๋ณด์ž.

s += "A"; ์—์„œ i๋ฒˆ์งธ์—์„œ s์˜ ๊ธธ์ด + "A"์˜ ๊ธธ์ด1 ๋งŒํผ์˜ ์‹œ๊ฐ„์ด ์†Œ์š”๋˜๊ณ  ๊ทธ๊ณผ์ •์„ N๋ฒˆ๋งŒํผ ๋ฐ˜๋ณตํ•˜๋ฏ€๋กœ

์—ฐ์‚ฐํšŸ์ˆ˜๋Š” N * (N+1) / 2 * N ์ด๊ณ , ์ด ์‹œ๊ฐ„๋ณต์žก๋„๋Š” ์ด ๋œ๋‹ค.

N * (N+1) / 2   ๋Š” 1๋ถ€ํ„ฐ N๊นŒ์ง€์˜ ํ•ฉ, N์€ ๋ฐ˜๋ณต๋ฌธ ํšŸ์ˆ˜)

 

public class Main {
    public static void main(String[] args) {
        String str = "";
        int n = 1000000;
        for(int i = 0; i < n; i++){
        	s += "A";
        }
    }
}
 
 
 

์ด๋Ÿฌํ•œ '+' ์—ฐ์‚ฐ์€ StringBuffer ๋˜๋Š” StringBuilder๋ฅผ ์ด์šฉํ•˜๋ฉด ์ผ๋ฐ˜์ ์ธ ๊ฒฝ์šฐ ์— ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ

์œ„์˜ ์ฝ”๋“œ๋ฅผ ์•„๋ž˜์ฒ˜๋Ÿผ ๋ฐ”๊พผ๋‹ค๋ฉด sb.append("A"); ์˜ ์‹œ๊ฐ„๋ณต์žก๋„๋Š” ์ด ๋˜๋ฏ€๋กœ ์ „์ฒด ์‹œ๊ฐ„๋ณต์žก๋„๋ฅผ ์œผ๋กœ ์ค„์ผ ์ˆ˜ ์žˆ๋Š” ํšจ๊ณผ๋ฅผ ๊ฐ€์ ธ์˜จ๋‹ค !

public class Main {
    public static void main(String[] args) {
        StringBuider sb = new StringBuider();
        int n = 1000000;
        for(int i = 0; i < n; i++){
        	sb.append("A");
        }
    }
}

 

 

String ๋‚ด์žฅํ•จ์ˆ˜ replace์˜ ์‹œ๊ฐ„๋ณต์žก๋„๋Š” O(๋ฌธ์ž์—ด์˜ ๊ธธ์ด * (๊ต์ฒดํ•  ๋ฌธ์ž์—ด์˜ ๊ธธ์ด + ๊ต์ฒด๋˜๋Š” ๋ฌธ์ž์—ด์˜ ๊ธธ์ด/๊ต์ฒดํ•  ๋ฌธ์ž์—ด์˜ ๊ธธ์ด))์ด๋‹ค.

 ์ฆ‰, str.replace(a, b)๋ผ๋ฉด O(len(str) * (len(a) + len(b)/len(a)))์ด๋‹ค.

replace ํ•จ์ˆ˜๋Š” ๋ฌธ์ž์—ด str์˜ ๊ธธ์ด๋งŒํผ ์ „์ฒด์ ์œผ๋กœ ๋ฌธ์ž์—ด์„ ํ•˜๋‚˜์”ฉ ํƒ์ƒ‰ํ•˜๊ณ  ๊ต์ฒดํ•  ๋ฌธ์ž์—ด์˜ ๊ธธ์ด๋งŒํผ ์ด์ „๊ฐ’์„ ํƒ์ƒ‰ํ•ด์„œ ๊ต์ฒดํ•ด์•ผํ•˜๋Š” ๋ฌธ์ž์—ด์ธ์ง€ ์•„๋‹Œ์ง€๋ฅผ ํŒ๋ณ„ํ•œ๋‹ค.

๊ต์ฒดํ•ด์•ผ ํ•˜๋Š” ๊ฒฝ์šฐ, ๊ต์ฒด๋˜๋Š” ๋ฌธ์ž์—ด์˜ ๊ธธ์ด์— ๋”ฐ๋ผ ์ถ”๊ฐ€ ์—ฐ์‚ฐ์ด ํ•„์š”ํ•˜๋‹ค.

๊ต์ฒด๋˜๋Š” ๋ฌธ์ž์—ด์˜ ๊ธธ์ด๊ฐ€ ๊ต์ฒดํ•  ๋ฌธ์ž์—ด์˜ ๊ธธ์ด์™€ ๊ฐ™์€ ๊ฒฝ์šฐ, ํ• ๋‹น๋œ ๊ธธ์ด๋งŒํผ(๊ต์ฒดํ•  ๋ฌธ์ž์—ด์˜ ๊ธธ์ด๋งŒํผ)๋งŒ ์—ฐ์‚ฐ์„ ์ˆ˜ํ–‰ํ•˜๋ฉด ๋˜๊ธฐ ๋•Œ๋ฌธ์— O(len(b) / len(a)) = O(1)๋กœ ์ƒ์ˆ˜์˜ ์‹œ๊ฐ„์ด ์†Œ์š”๋œ๋‹ค.

๊ต์ฒด๋˜๋Š” ๋ฌธ์ž์—ด์˜ ๊ธธ์ด๊ฐ€ ๊ต์ฒดํ•  ๋ฌธ์ž์—ด์˜ ๊ธธ์ด๋ณด๋‹ค ํฐ ๊ฒฝ์šฐ, ์ดˆ๊ณผ๋œ ๊ธธ์ด๋งŒํผ ์ƒˆ ์œ„์น˜๋ฅผ ๋งŒ๋“ค๊ณ  ๊ต์ฒด๊ฐ€ ์ด๋ค„์ง€๋ฏ€๋กœ O(len(b) / len(a))๋งŒํผ์˜ ์ถ”๊ฐ€ ์—ฐ์‚ฐ์ด ์†Œ์š”๋œ๋‹ค. ๋”ฐ๋ผ์„œ ์ด ๊ฒฝ์šฐ๊ฐ€ ์ตœ์•…์˜ ๊ฒฝ์šฐ๋‹ค.

 

 

 

๋งˆ๋ฌด๋ฆฌ

String์„ ์ด์šฉํ•˜๋ฉด ๋ฌธ์ž์—ด์„ ๋ฆฌํ„ฐ๋Ÿด๋กœ ์ดˆ๊ธฐํ™” ํ•  ์ˆ˜ ์žˆ์–ด ๋น ๋ฅด๊ฒŒ ์ƒ์„ฑ์ด ๊ฐ€๋Šฅํ•˜๊ณ 

๋ฆฌํ„ฐ๋Ÿด์€ ๋ถˆ๋ณ€ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์žฌ์‚ฌ์šฉํ•  ๊ฒฝ์šฐ ๋ฉ”๋ชจ๋ฆฌ ์†Œ๋ชจ๊ฐ€ ์ ๋‹ค๋Š” ์žฅ์ ์ด ์žˆ์—ˆ๋‹ค.

 

ํ•˜์ง€๋งŒ String์˜ ๋ฌธ์ž์—ด ์ถ”๊ฐ€ ์—ฐ์‚ฐ์€ ๋Š๋ฆฌ๊ณ  ์ถ”๊ฐ€ํ•  ๋•Œ๋งˆ๋‹ค ๋งค๋ฒˆ ์ƒˆ๋กœ์šด ๋ฌธ์ž์—ด์„ ์ถ”๊ฐ€ํ•˜๊ธฐ ๋•Œ๋ฌธ์—

์žฆ์€ ๋ณ€๊ฒฝ์ด ์ด๋ฃจ์–ด ์ง„๋‹ค๋ฉด StringBuffer๋˜๋Š” StringBuilder๋ฅผ ์‚ฌ์šฉํ•˜๋Š”๊ฒƒ์ด ์ข‹๋‹ค.

๋˜ํ•œ 

 

StringBuffer์™€ StringBuilder์™€์˜ ์ฐจ์ด์ ์€ thread-safe์˜ ์œ ๋ฌด์ด๋‹ค.

StringBuffer๊ฐ€ thread-safeํ•˜๋‹ค.

๋ถ„๋ฅ˜ String StringBuffer StringBuilder
๋ณ€๊ฒฝ Immutable Mutable Mutable
๋™๊ธฐํ™”   Synchronized ๊ฐ€๋Šฅ (Thread-safe) Synchronized ๋ถˆ๊ฐ€๋Šฅ.

 

 

 ๋”ฐ๋ผ์„œ ์ด ํ–„๋ฒ„๊ฑฐ ๋งŒ๋“ค๊ธฐ ๋ฌธ์ œ๋Š” String์˜ replaceFirst๋ฅผ StringBuilder ๋ฅผ ์“ฐ๋ฉฐ ํ’€ ์ˆ˜ ์žˆ๋Š”์ง€ ๊ทธ๋ฆฌ๊ณ  ์ด๊ฒƒ์„ ์ธ์ง€ํ•˜๊ณ  ์žˆ๋Š”์ง€๋ฅผ ๋ฌป๋Š” ๋ฌธ์ œ์ด๋‹ค.

 

 

 

๐Ÿ“‘์ฐธ๊ณ 

https://hwayomingdlog.tistory.com/134

https://barbera.tistory.com/45

 

๋Œ“๊ธ€