코딍코딍
코딩기록
코딍코딍
전체 방문자
오늘
어제
  • 분류 전체보기 (271)
    • 개발 (2)
    • Java (1)
    • 스프링 (28)
    • JPA (11)
    • Git (3)
    • 알고리즘 (160)
      • 백준 (132)
      • 프로그래머스 (8)
      • SWEA (20)
    • 토이 프로젝트 (14)
      • 간단한 Springboot CRUD (1)
      • 게시판 프로젝트 (13)
    • 알고리즘 개념정리 (8)
    • 오류 해결 (13)
    • 보류 (0)
    • AWS (5)
    • 트러블 슈팅 (0)
    • 회고 (3)
    • CS (4)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

최근 글

티스토리

hELLO · Designed By 정상우.
코딍코딍

코딩기록

알고리즘/백준

17413번 : 단어 뒤집기2

2022. 8. 16. 21:07

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

 

17413번: 단어 뒤집기 2

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

www.acmicpc.net

 

 

문제

 

 

코드

import java.io.*;
import java.util.*;

public class Main {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
        StringBuilder sb = new StringBuilder();
        StringBuilder ve = new StringBuilder();
        
        String str = br.readLine();
        boolean flag=false;
        for(int i=0;i<str.length();i++) {
            char c = str.charAt(i);
            if(c == '<') {
                if(ve.length()!=0) { //문자열 뒤집어 저장
                    sb.append(ve.reverse()); ve.setLength(0);
                }
                flag=true;
            }
            if(c == '>') {
                flag=false;
                sb.append(c);
                continue;
            }
            
            if(flag) {
                sb.append(c);
            }
            else {
                if(c==' ') { //문자열 뒤집어 저장
                    sb.append(ve.reverse() + " ");
                    ve.setLength(0); //sb초기화
                }else {
                    ve.append(c);
                }
            }
        }
        //문자열 뒤집어 저장
        if(ve.length()!=0) sb.append(ve.reverse());
        bw.write(sb+""); bw.flush();
    }
}

 

 

해결방법

문자열을 뒤집기 위한 방법으로 스택이나 StringBuilder를 사용할 수 있는데 StringBuiler를 사용했다.

 

'<'과 '>' 사이에 들어있는 문자열은 그대로 유지해야하므로 변수 flag를 두어 현재 '<', '>' 사이에 위치해있는지를 판단하였다. '<', '>' 사이에 위치해있다면 문자를 그대로 결과값을 출력하는 sb에 붙이고 아니라면 ve에 붙여 공백이나 '<'를 만나는 경우 문자열을 뒤집어 sb에 붙여주었다.

 

'알고리즘 > 백준' 카테고리의 다른 글

1302번 : 베스트셀러  (0) 2022.08.17
14425번 : 문자열 집합  (0) 2022.08.17
19941번 : 햄버거 분배  (0) 2022.08.16
1654번 : 랜선 자르기  (0) 2022.08.05
2865번 : 나는 위대한 슈퍼스타K  (0) 2022.08.05
    '알고리즘/백준' 카테고리의 다른 글
    • 1302번 : 베스트셀러
    • 14425번 : 문자열 집합
    • 19941번 : 햄버거 분배
    • 1654번 : 랜선 자르기
    코딍코딍
    코딍코딍
    ㅎ2

    티스토리툴바