[BOJ][S3] 17413_단어뒤집기2

2025. 9. 26. 10:50·알고리즘 문제풀이
반응형

알고리즘 BOJ_17413_단어뒤집기2_S3

문제 내용

문자열 S이 알파벳 소문자('a'-'z'), 숫자('0'-'9'), 공백(' ``'), 특수 문자('<', '>')로만 이루어져 있다
'<'와 '>'가 문자열에 있는 경우 번갈아가면서 등장

<'로 시작해서 '>'로 끝나는 길이가 3 이상인 부분 문자열이고, '<'와 '>' 사이에는 알파벳 소문자와 공백만 있다. 단어는 알파벳 소문자와 숫자로 이루어진 부분 문자열이고, 연속하는 두 단어는 공백 하나로 구분무

문제 접근

  1. 문자열 S 에서 단어를 뽑아낸다. 뽑아내는 기준은 우선위로 <> 로 구분을 하고 <> 안 공백(' ')은 바뀌지 않고 <> 외부의 공백(' ') 은 바뀌게 된다.
  2. 일단 List 형태로 저장한다. 그리고 <> 태그안에 들어가는 건지 아니면 그냥 문자열인지 구분하는 List 형태로 배열을 하나더 <> 로 된건 true 로 처리
  3. 마지막에 List 을 출력하면 될듯?

실제 풀이 방법

  1. 문자열 S 를 받아와서 각 문자를 S.charAt(i) 형식으로 받아 각각의 문자를 비교
  2. < 일 경우 이전까지 있던 stack 구조에 있는 내용을 전부 출력(역순으로 출력됨) 그리고 그대로 출력
  3. <> 범위 안이 아닐경우에는 stack 에 추가하는 구조로 구성
  4. 마지막에 혹시 모를 스택 pop

사용된 알고리즘 or 자료구조

Stack 사용 : static Stack<Character> stack;

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

public class Main {

    static BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
    static StringBuilder sb = new StringBuilder();

    static String S;
    static boolean isCheck;
    static Stack<Character> stack;

    public static void main(String[] args) throws IOException {
        S = br.readLine();
        isCheck = false;
        stack = new Stack<>();

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

            if(!isCheck){
                // <> 여부확인
                if(c == '<'){
                    isCheck = true;
                    while (!stack.isEmpty()) {
                        sb.append(stack.pop());
                    }
                    sb.append(c);
                }else if(c == ' '){
                    while (!stack.isEmpty()) {
                        sb.append(stack.pop());
                    }
                    sb.append(c);
                }else{
                    stack.add(c);
                }
            }else if(c == '>'){
                isCheck = false;
                sb.append(c);
            }else{
                // ischeck 가 true 인경우 <> 안인 경우 그대로 문자열을 넣는다.
                sb.append(c);
            }
        }

        while (!stack.isEmpty()) {
            sb.append(stack.pop());
        }

        System.out.println(sb);
    }

}
반응형

'알고리즘 문제풀이' 카테고리의 다른 글

[BOJ][P5] 6549 히스토그램에서 가장 큰 직사각형  (0) 2025.10.01
[BOJ][G5] 2504 괄호의값  (0) 2025.09.27
[SWEA][D2] 1940. 가랏! RC카 Java  (1) 2025.06.04
[SWEA][D2] 1945. 간단한 소인수분해 Java  (0) 2025.06.04
[SWEA][D2] 1288. 새로운 불면증 치료 Java  (0) 2025.06.04
'알고리즘 문제풀이' 카테고리의 다른 글
  • [BOJ][P5] 6549 히스토그램에서 가장 큰 직사각형
  • [BOJ][G5] 2504 괄호의값
  • [SWEA][D2] 1940. 가랏! RC카 Java
  • [SWEA][D2] 1945. 간단한 소인수분해 Java
WHITE_FROST
WHITE_FROST
개발공부리뷰블로그
    반응형
  • WHITE_FROST
    하얀하얀IT
    WHITE_FROST
  • 전체
    오늘
    어제
    • 분류 전체보기 (119)
      • Stack (43)
        • Next.js (7)
        • React (12)
        • React-Native (15)
        • TypeScript (0)
        • Python (2)
        • JavaScript (2)
        • Android (1)
        • DB (2)
        • JAVA (1)
      • Obsidian (1)
      • AI (3)
      • AI Tools (0)
      • Tools (0)
      • Mac (0)
      • Error (7)
      • 알고리즘 정리 (6)
      • 알고리즘 문제풀이 (46)
      • 공부일상 (4)
      • 개발 도구 & 라이브러리 (0)
      • 정보처리기사 (0)
      • 기타 (6)
      • Tip (2)
  • 블로그 메뉴

    • 홈
    • 태그
    • 미디어로그
    • 위치로그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    react-native-maps
    Expo
    boj
    SWEA
    Next.js
    React-Native cli
    java
    javascript
    react
    reactnative
    오블완
    react-native
    ios
    백준
    프로그래머스
    React Hooks
    코딩테스트
    리액트네이티브
    d1
    알고리즘
    mongodb cloud
    hooks
    D2
    코테
    코테준비
    ReactHook
    mongoDB Atlas
    티스토리챌린지
    Python
    error
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.5
WHITE_FROST
[BOJ][S3] 17413_단어뒤집기2
상단으로

티스토리툴바