코딩테스트/프로그래머스

[프로그래머스] Java :: 문자열 뒤집기

블로그 주인장 2024. 3. 22.

문제 링크

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

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

문제 설명

문자열 my_string과 정수 se가 매개변수로 주어질 때, 

my_string에서 인덱스 s부터 인덱스 e까지를 뒤집은 문자열을 return 하는 solution 함수를 작성해 주세요.

 

제한 설명

  • my_string은 숫자와 알파벳으로만 이루어져 있습니다. 
  • 1 ≤ my_string의 길이 ≤ 1,000 
  • 0 ≤ s ≤ e < my_string의 길이

 

입출력 예시

my_string  s  e  result 
"Progra21Sremm3" 6 12 "ProgrammerS123" 
"Stanley1yelnatS" 4 10 "Stanley1yelnatS"

 

 

코드 구현

import java.util.*;

class Solution {
    public String solution(String my_string, int s, int e) {
        Stack<Character> stack = new Stack<>();
        StringBuilder sb = new StringBuilder();
        
        for(int i = 0; i < my_string.length(); i++) {
            if(i >= s && i <= e) {
                stack.add(my_string.charAt(i));
            }
        }
        
        for(int i = 0; i < my_string.length(); i++) {
            if(i >= s && i <= e) {
                sb.append(stack.pop());
            } else {
                sb.append(my_string.charAt(i));
            }
        }
        
        return sb.toString();
    }
}

 

풀이

  1. 문제에서 s -> e 까지의 인덱스에 해당하는 문자를 뒤집어서 기존 문자열에 더해야합니다.
  2. 필자의 경우에는 stack을 활용하여 구현을 진행했습니다.
    (stack은 LIFO 방식으로 처음에 넣은 값은 마지막에 빼는 방식)
  3. for문을 활용하여 s와 e에 해당하는 조건인 경우 stack에 넣어놓습니다.
  4. 후에 stack 안에 있는 데이터를 꺼내 StringBuilder에 append 시켜줍니다.
  5. String으로 return 해야하기 때문에 StringBuilder.toString() 메서드를 활용합니다.

 

코드 구현(다른 방식)

class Solution {
    public String solution(String my_string, int s, int e) {
        StringBuilder answer = new StringBuilder(my_string.substring(s, e + 1));
        answer.reverse();
        return my_string.substring(0, s) + answer + my_string.substring(e + 1);
    }
}

 

풀이

  1. 문제에서 s 부터 e + 1 까지의 substring( ) 영역의 데이터를 StringBuilder() 안에 넣어줍니다.
  2. StirngBuilder의 값을 reverse() 시켜줍니다.
  3. mystring의 첫 번째 인덱스부터 s 까지의 값과 answer, 그리고 e + 1 의 값을 더해서 반환해줍니다.
반응형

댓글