안녕하세요. 회사와 함께 성장하고 싶은 KOSE입니다.

이번 포스팅은 백준 문자열 문제 - 단어 뒤집기 2 자바 풀이를 진행하도록 하겠습니다.

 

문제 출처: https://www.acmicpc.net/submit/17413

 

로그인

 

www.acmicpc.net

 

1. 풀이 소스

 

import java.io.*;

public class Main {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        String str = br.readLine();
        
        StringBuilder sb = new StringBuilder();

        boolean flag = false; // '<' 의 시작여부

        int start = -1; // 단어를 뒤집어야할 때 역순으로 순회하기 위한 인덱스 (초기화  -1)
        int end = -1;

        for (int i = 0; i < str.length(); i++) {
            char c = str.charAt(i);

            if (c == '<') {
                if (start != -1) { // 만약 '<' 이전에 'apple<' 처럼 뒤집어야 하는 문자열이 있음
                    for (int j = end; j >= start; j--) sb.append(str.charAt(j));
                    start = -1; // 초기화
                    end = -1;
                }
                flag = true; // flag가 true라면 '>'로 닫히지전까지 유효
            }

            if (flag) sb.append(str.charAt(i)); // 현재 꺽쇠 안이므로 flag
            else {
                if (start == -1) start = i; // 시작 인덱스 설정
                end = i; // 끝 인덱스는 계속 업데이트 (단어 길이가 1일 수 있음)

                if (c == ' ') {
                    for (int j = end - 1; j >= start; j--) sb.append(str.charAt(j));
                    start = -1;
                    sb.append(c);
                }
            }

            if (c == '>') flag = false; // flag false로 설정하여 꺽쇠 해제
        }

        // 꺽쇠 혹은 공백이 없어서 sb에 추가되지 않은 문자열이 있을 수 있으므로
        if (start != -1) {
            for (int j = end; j >= start; j--) sb.append(str.charAt(j));
        }

        System.out.print(sb);
    }
}

 

2. 풀이 중점 사항

 

꺽쇠 내부가 아닌 밖에서 단어를 뒤집어야 할 때, start, end 인덱스를 활용하여 역순으로 sb에 append 하는 것이 중요하였습니다.

단어가 뒤집힐 수 있는 경우를 고려하여, 꺽쇠 밖에 위치하여 공백이 나오거나 다음 char에 '<'를 만난다면, 단어가 있다면 뒤집을 수 있도록 하였습니다. 테스트 케이스 1과 같이 'judge'는 꺽쇠를 만나서 sb에 append 되거나, 공백으로 append 되지 않습니다. 따라서 str.length()에 대한 순회를 마친 후 start 인덱스로 단어가 있는지 판단하였습니다.

이상으로 단어 뒤집기 2 자바 풀이를 마치도록 하겠습니다. 감사합니다!

+ Recent posts