백준 알고리즘 17413번
https://www.acmicpc.net/problem/17413
17413번: 단어 뒤집기 2
문자열 S가 주어졌을 때, 이 문자열에서 단어만 뒤집으려고 한다. 먼저, 문자열 S는 아래와과 같은 규칙을 지킨다. 알파벳 소문자('a'-'z'), 숫자('0'-'9'), 공백(' '), 특수 문자('<', '>')로만 이루어져 �
www.acmicpc.net
백준 9093번 <단어 뒤집기>의 업그레이드버전???!!!
<단어 뒤집기>와 <단어 뒤집기 2> = 브론즈 1과 실버 3ㅎㅎ
17413번
입력으로 주어지는 문자열에서 태그와 단어를 구분해서 태그는 그대로 단어만 뒤집어서 출력한다.
태그는 공백과 알파벳 소문자로 이루어져있고 단어는 알파벳 소문자와 숫자로 이루어져있다.
처음에는 <에디터>문제에서 배운! StringTokenizer를 사용해서 태그와 단어를 구분하려고 했는데\
태그에 공백이 존재할 수 있어서 불가능!!!!
문제 해결
그래서! input에 입력받은 문자열을 저장하고 while문을 돌렸다!
결과를 저장할 StringBuffer result 사용.
1. input의 첫번째 글자가 <이면 -> 태그!
<의 index와 >의 index를 구해서 태그부분을 잘라서 태그를 result에 넣어준다.
그리고 input에서 태그를 잘라낸다.
만약 input에서 태그를 잘라내고서 길이가 0이면 break.
2. input의 첫번째 글자가 <이 아니면 -> 단어!
1) index를 0으로 초기화하고
2) while문을 한 번 더 돌린다.
- index와 input의 길이가 같으면 break. (마지막 단어!)
- charAt으로 index번째의 글자를 얻는다.
- 만약 그 글자가 '<'이거나 ' '이면 break. (단어가 끝났으니까!)
- 그 글자를 stack에 넣는다.
- index에 +1을 해준다. (다음 글자를 봐야하니까!)
3) stack의 크기만큼 for문을 돌려서 stack에서 꺼내서 result에 넣어준다.
4) index랑 input의 길이가 같으면 break. (마지막 단어!)
5) 만약 input의 index번째 글자가 ' '이면 result에 " "를 넣어주고 index+1
6) input에서 index를 이용해 result에 저장한 단어를 잘라준다.
코드
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Stack;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringBuffer result = new StringBuffer();
String input = br.readLine();
int length = input.length();
Stack<Character> stack = new Stack<Character>();
while (true) {
if (input.charAt(0) == '<') {
int open = input.indexOf("<");
int close = input.indexOf(">");
String temp = input.substring(open, close + 1);
input = input.substring(close + 1, length);
length = input.length();
result.append(temp);
if (length == 0) {
break;
}
} else {
int index = 0;
while (true) {
if (index == length) {
break;
}
char addChar = input.charAt(index);
if (addChar == '<' || addChar == ' ') {
break;
}
stack.add(addChar);
index++;
}
int size = stack.size();
for (int i = 0; i < size; i++) {
result.append(stack.pop());
}
if (index == length) {
break;
}
if (input.charAt(index) == ' ') {
result.append(" ");
index++;
}
input = input.substring(index, length);
length = input.length();
}
}
System.out.println(result.toString());
}
}
'Algorithm' 카테고리의 다른 글
백준 10926번 <??!> (0) | 2020.08.29 |
---|---|
백준 9095번 <1, 2, 3 더하기> (0) | 2020.08.28 |
백준 17298번 <오큰수> (0) | 2020.08.27 |
백준 1158번 <요세푸스 문제> (0) | 2020.08.26 |
백준 10845번 <큐> (0) | 2020.08.26 |
댓글