본문 바로가기

코딩테스트/자바(Java) 알고리즘 문제풀이 입문: 코딩테스트 대비

섹션 1. 문자열 - 4. 단어 뒤집기

📌 문제 설명

N개의 단어가 주어지면, 각 단어를 뒤집어서 출력하는 프로그램을 작성하세요.

  • 첫 줄에 자연수 N(3 ≤ N ≤ 20)이 주어집니다.
  • 두 번째 줄부터 N개의 단어가 각 줄에 하나씩 주어집니다.
  • 단어는 영어 알파벳으로만 구성됩니다.
  • 단어를 입력된 순서대로 한 줄에 하나씩 뒤집어서 출력합니다.

📝 입력 & 출력

🔹 입력

  • 첫 번째 줄: 자연수 N (3 ≤ N ≤ 20)
  • 두 번째 줄부터 N개의 단어가 주어짐.

🔹 출력

  • 입력된 단어들을 뒤집어서 한 줄씩 출력.

🔸 예제 입력 1

3
good
Time
Big

🔸 예제 출력 1

doog
emiT
giB

💡 해결 방법

  1. 문자열을 뒤집는 방법은 두 가지가 있음
    • StringBuilder.reverse() 사용 → 가독성이 좋고 간결함
    • 투 포인터 알고리즘 활용 → 배열을 직접 조작하며 뒤집기
  2. N개의 단어를 입력받아 각각 뒤집고 리스트에 저장
  3. 뒤집힌 단어들을 출력

💻 코드 구현 (Java)

package partString;

import java.util.*;

public class Problem4 {

    public ArrayList<String> solution(int n, String[] str) {
        ArrayList<String> answer = new ArrayList<>();
        
        for (String x : str) {
            // 방법 1: StringBuilder 활용 (간단한 방법)
            // String tmp = new StringBuilder(x).reverse().toString();
            
            // 방법 2: 투 포인터 활용 (직접 뒤집기)
            char[] s = x.toCharArray();
            int lt = 0, rt = x.length() - 1;
            while (lt < rt) {
                char tmp = s[lt];
                s[lt] = s[rt];
                s[rt] = tmp;
                lt++;
                rt--;
            }
            String tmp = String.valueOf(s);
            
            answer.add(tmp);
        }
        
        return answer;
    }

    public static void main(String[] args) {
        Problem4 T = new Problem4();
        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);
        }
        
        kb.close();
    }
}

📖 코드 설명

1️⃣ StringBuilder.reverse() 활용 (가장 간단한 방법)

String tmp = new StringBuilder(x).reverse().toString();
  • 가독성이 좋고 간결함
  • StringBuilder를 사용하여 문자열을 뒤집은 후, toString()으로 변환

2️⃣ 투 포인터를 활용한 직접 뒤집기

char[] s = x.toCharArray();
int lt = 0, rt = x.length() - 1;
while (lt < rt) {
    char tmp = s[lt];
    s[lt] = s[rt];
    s[rt] = tmp;
    lt++;
    rt--;
}
String tmp = String.valueOf(s);
  • 배열을 직접 조작하면서 뒤집는 방식
  • lt와 rt를 양 끝에서 이동시키며 swap 연산 수행
  • while (lt < rt) 조건을 만족하는 동안 계속 교환

⏳ 시간 복잡도 분석

  • O(N * M) (N: 단어 개수, M: 단어 길이)
  • 각 단어를 한 번씩 뒤집으므로 선형 시간 복잡도를 가짐.

출처: 인프런 자바(Java) 알고리즘 문제풀이 입문: 코딩테스트 대비

 

자바(Java) 알고리즘 문제풀이 입문: 코딩테스트 대비 강의 | 김태원 - 인프런

김태원 | , 자바(Java) 알고리즘 문제풀이 채점사이트를 통해 기초부터 준비해보세요! 💪 [사진] 이 강의는 [사진] 자바(Java)로 코딩테스트 준비를 하고 계신 분께 추천드려요! 문제는 기초~ 중급

www.inflearn.com