본문 바로가기
알고리즘

[JAVA]백준 17413번: 단어 뒤집기 2

by Kwoncorin 2021. 8. 23.
728x90

 

https://www.acmicpc.net/problem/17413

 

17413번: 단어 뒤집기 2

문자열 S가 주어졌을 때, 이 문자열에서 단어만 뒤집으려고 한다. 먼저, 문자열 S는 아래와과 같은 규칙을 지킨다. 알파벳 소문자('a'-'z'), 숫자('0'-'9'), 공백(' '), 특수 문자('<', '>')로만 이루어져

www.acmicpc.net

1. 문제 설명

 

문자열 S가 주어졌을 때, 이 문자열에서 단어만 뒤집어서 출력한다.

 

2. 풀이

 

문자열 S를 구분하자면 다음과 같다.

  • 단어
  • 태그 
  • 공백

공백과 태그 안의 경우 그대로 문자열을 출력해주어야 하고, 단어의 경우에는 뒤집어서 출력해야 한다.

 

따라서 태그 안인지 확인하는 변수를 두어서

 

태그 안이거나 공백이면 그대로 출력하고

 

단어이면 단어 끝까지 길이를 확인하고, 거꾸로 sb에 저장해주었다.

 

 

3. 코드

// JAVA 11, 시간 : 224ms , 메모리 : 18784KB


import java.io.*;
import java.nio.Buffer;

public class Main {

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

        String input = br.readLine();
        int inputLength = input.length();

        boolean tag=false;

        for (int x = 0; x < inputLength; x++) {
            
            if(input.charAt(x)=='<'){
                // tag 시작
                tag=true;
                sb.append('<');
            }else if(input.charAt(x)=='>'){
                // tag 끝
                tag=false;
                sb.append('>');
            }else if(tag || input.charAt(x)==' '){
                // tag 안이거나 공백일 경우
                sb.append(input.charAt(x));
            }else{
                // 단어 일 경우 -> 뒤집어야 한다.
                int idx=x;

                // 단어 끝까지 길이 확인
                while(idx<inputLength && (input.charAt(idx)!=' ' && input.charAt(idx)!='<')){
                    idx++;
                }

                // 거꾸로 저장
                for(int y=idx-1;y>=x;y--){
                    sb.append(input.charAt(y));
                }

                x=idx-1;
            }
        }

        System.out.println(sb);
    }
}
728x90

'알고리즘' 카테고리의 다른 글

[JAVA]백준 12919번: A와 B 2  (0) 2021.08.24
[JAVA]백준 16928번: 뱀과 사다리 게임  (0) 2021.08.23
[JAVA]백준 13699번: 점화식  (0) 2021.08.23
[JAVA]백준 20207번: 달력  (0) 2021.08.19
[JAVA]백준 15654번: N과 M(5)  (0) 2021.08.18