[https://www.acmicpc.net/problem/17413
17413번: 단어 뒤집기 2
문자열 S가 주어졌을 때, 이 문자열에서 단어만 뒤집으려고 한다. 먼저, 문자열 S는 아래와과 같은 규칙을 지킨다. 알파벳 소문자('a'-'z'), 숫자('0'-'9'), 공백(' '), 특수 문자('<', '>')로만 이루어져 있다. 문자열의 시작과 끝은 공백이 아니다. '<'와 '>'가 문자열에 있는 경우 번갈아가면서 등장하며, '<'이 먼저 등장한다. 또, 두 문자의 개수는 같다. 태그는 '<'로 시작해서 '>'로 끝나는 길이가 3 이상인 부분 문자
www.acmicpc.net
1. 풀이
[백준 9093] 단어 뒤집기 - 자바 와 비슷한 문제이다.
루프를 돌면서 해당 문자가 태그<>안인지 아닌지만 확인하여 단어를 뒤집어 주면 된다.
태그 인지 아닌지 확인할 때는 정수를 사용해서 여는 문자 ('<')일때는 플러스 1을 해주고,
닫는 문자 ('>')일때는 마이너스 1을 해줌으로써, 태그 안인지 밖인지 구분이 가능하다.
2. 코드
import java.util.*;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
Stack<Character> stack = new Stack<Character>();
int check = 0; // 태그안인지 아닌지 체크.
String input = sc.nextLine();
StringBuilder result = new StringBuilder();
for(char ch : input.toCharArray()) {
if(ch == '<') {
check+=1; // 태그 안을 의미.
// 태그 전까지의 문자 뒤집기.
while(!stack.isEmpty()) {
result.append(stack.pop());
}
result.append("<");
} else if(ch == '>') {
check-=1; // 태그 탈출.
result.append(">");
} else if(ch == ' ') {
// 공백 전까지의 문자 뒤집기.
while(!stack.isEmpty())
result.append(stack.pop());
result.append(" ");
} else {
if(check == 0) // 태그 밖
stack.push(ch);
else // 태그 안.
result.append(ch);
}
}
// 스택에 남은 문자 뒤집기.
while(!stack.isEmpty())
result.append(stack.pop());
System.out.println(result);
sc.close();
return;
}
}
'알고리즘 > 백준' 카테고리의 다른 글
[백준 17298] 오큰수 - 자바 (0) | 2020.04.26 |
---|---|
[백준 10799] 쇠막대기 - 자바 (1) | 2020.04.26 |
[백준 10866] 덱 - 자바 (0) | 2020.04.25 |
[백준 1158] 요세푸스 문제 - 자바 (0) | 2020.04.25 |
[백준 10845] 큐 - 자바 (0) | 2020.04.25 |
댓글