-
[JAVA] 17413번: 단어 뒤집기2Algorithm/백준 알고리즘 2021. 7. 7. 15:05
문제 설명
문자열 S가 주어졌을 때, 이 문자열에서 단어만 뒤집으려고 한다.
먼저, 문자열 S는 아래와과 같은 규칙을 지킨다.
- 알파벳 소문자('a'-'z'), 숫자('0'-'9'), 공백(' '), 특수 문자('<', '>')로만 이루어져 있다.
- 문자열의 시작과 끝은 공백이 아니다.
- '<'와 '>'가 문자열에 있는 경우 번갈아가면서 등장하며, '<'이 먼저 등장한다. 또, 두 문자의 개수는 같다.
태그는 '<'로 시작해서 '>'로 끝나는 길이가 3 이상인 부분 문자열이고, '<'와 '>' 사이에는 알파벳 소문자와 공백만 있다. 단어는 알파벳 소문자와 숫자로 이루어진 부분 문자열이고, 연속하는 두 단어는 공백 하나로 구분한다. 태그는 단어가 아니며, 태그와 단어 사이에는 공백이 없다.
입력
- 첫째 줄에 문자열 S가 주어진다. S의 길이는 100,000 이하이다.
출력
- 첫째 줄에 문자열 S의 단어를 뒤집어서 출력한다.
풀이
1. 단어뒤집기 1문제와 똑같은 형태로 약간의 변화만 준다면 쉽게 해결할 수 있는 문제이다. 단어를 뒤집기 위해 Stack을 사용하였다. Stack은 아시다시피, 가장 늦게들어온 원소가 가장 먼저 가장 먼저 리턴되는 특징이 있다.
2. 따라서, Stack을 사용할 경우 h, e, l, l, o 순으로 push연산을 수행할 경우 o, l, l, e, h 순으로 pop연산이 실행될 것이다.
3. 입력받은 문자열을 str에 저장하고, check를 이용하여 '<'와 '>'기호접근을 판단한다.
4. '<', '>', ' '을 만났을 경우 show함수를 통해 스택에 저장되어있던 모든 원소를 화면에 출력한다.
5. 만약 꺽새 기호를 만났을 경우 그 내부에 있는 문자들은 그대로 화면에 출력한다.코드
/* 문자열 S가 주어졌을 때, 이 문자열에서 단어만 뒤집으려고 한다. 먼저, 문자열 S는 아래와과 같은 규칙을 지킨다. 알파벳 소문자('a'-'z'), 숫자('0'-'9'), 공백(' '), 특수 문자('<', '>')로만 이루어져 있다. 문자열의 시작과 끝은 공백이 아니다. '<'와 '>'가 문자열에 있는 경우 번갈아가면서 등장하며, '<'이 먼저 등장한다. 또, 두 문자의 개수는 같다. 태그는 '<'로 시작해서 '>'로 끝나는 길이가 3 이상인 부분 문자열이고, '<'와 '>' 사이에는 알파벳 소문자와 공백만 있다. 단어는 알파벳 소문자와 숫자로 이루어진 부분 문자열이고, 연속하는 두 단어는 공백 하나로 구분한다. 태그는 단어가 아니며, 태그와 단어 사이에는 공백이 없다. */ import java.util.*; class Main { public static void main(String args[]) { Scanner sc = new Scanner(System.in); Stack stack = new Stack(); String str = sc.nextLine(); boolean check = false; for(int i = 0; i < str.length(); i++){ if(str.charAt(i) == '<'){ show(stack); check = true; System.out.print(str.charAt(i)); }else if(str.charAt(i) == '>'){ check = false; System.out.print(str.charAt(i)); }else if(check){ System.out.print(str.charAt(i)); }else{ if(str.charAt(i) == ' '){ show(stack); System.out.print(str.charAt(i)); }else{ stack.push(str.charAt(i)); } } } show(stack); } static void show(Stack stack){ while(!stack.empty()){ System.out.print(stack.peek()); stack.pop(); } } }
'Algorithm > 백준 알고리즘' 카테고리의 다른 글
[JAVA] 17298번: 오큰수 (0) 2021.07.08 [JAVA] 10799번: 쇠막대기 (0) 2021.07.07 [JAVA] 1158번: 요세푸스 문제 (0) 2021.07.06 [JAVA] 10845번: 큐 (0) 2021.07.06 [JAVA] 1406번 : 에디터 (0) 2021.07.05