Notice
Recent Posts
Recent Comments
Link
«   2025/07   »
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 29 30 31
Tags
more
Archives
Today
Total
관리 메뉴

이지은님의 블로그

[Java] 프로그래머스 문제 풀이 - 뒤집힌 문자열 본문

알고리즘 공부/[JAVA] 코드카타

[Java] 프로그래머스 문제 풀이 - 뒤집힌 문자열

queenriwon3 2025. 5. 15. 18:41

1️⃣ 뒤집힌 문자열 (https://school.programmers.co.kr/learn/courses/30/lessons/120822)

 

프로그래머스

SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프

programmers.co.kr

문자열 my_string 매개변수로 주어집니다. my_string 거꾸로 뒤집은 문자열을 return하도록 solution 함수를 완성해주세요.

 

 

👉 처음 푼 방법 : substring을 사용하는 방법

class Solution {
    public String solution(String my_string) {
        String answer = "";
        for (int i = my_string.length() - 1; i >= 0; i--) {
            answer += my_string.substring(i, i + 1);    // 	통과 (1.50ms, 90.3MB)
        }
        return answer;
    }
}

반복문으로 반복 + substring 사용 + String을 더함으로 문자열이 생성될 때마다 메모리 사용

-> 통과 (1.50ms, 90.3MB)

 

 

👉 두번째 방법 : charAt을 사용하는 방법

class Solution {
    public String solution(String my_string) {
        String answer = "";
        for (int i = my_string.length() - 1; i >= 0; i--) {
            answer += my_string.charAt(i);      // 통과 (8.61ms, 87.2MB)
        }
        return answer;
    }
}

반복문으로 반복 + charAt 사용(Char형으로 변환하여 가져옴) + String을 더함으로 문자열이 생성될 때마다 메모리 사용

-> 통과 (8.61ms, 87.2MB)

 

 

👉 세번째 방법 : StringBuilder의 reverse를 사용하는 방법

import java.util.*;

class Solution {
    public String solution(String my_string) {
        return new StringBuilder(my_string).reverse().toString();  // 통과 (0.03ms, 71.8MB)
    }
}

 

 

StringBuilder의 reverse()메서드를 사용하여 문자열을 뒤집을 수 있음 (시간 절약으로 이익)

-> 통과 (0.03ms, 71.8MB)

 

 

💬 왜 StringBuilder는 시간 절약을 할 수 있을까?

📌 String은 불변(immutable) 객체이고, StringBuilder는 가변(mutable) 객체

  • String은 새로운 문자열 객체를 생성해서 참조를 바꾸는 것 -> 이로 인해 시간이 오래 걸리고 메모리도 낭비
  • StringBuilder.reverse()는 내부 char[] 배열을 in-place로 뒤집음 -> 추가적인 문자열 생성 없이 효율적인 연산 수행
  • 멀티스레드 환경이라면 StringBuffer가 스레드 세이프라 더 적합함
항목 String  StringBuilder  StringBuffer
가변 여부 ❌ 불변 (Immutable) ✅ 가변 (Mutable) ✅ 가변 (Mutable)
속도 ⛔ 느림 (매번 새 객체 생성) ✅ 가장 빠름 ⏱ 중간 (동기화 오버헤드 존재)
스레드 안전성 ❌ 스레드 안전하지 않음 ❌ 스레드 안전하지 않음 ✅ 스레드 안전 (동기화 지원)
-> 멀티 스레드 환경에서 사용