반응형
| 시간 제한 | 메모리 제한 | 제출 | 정답 | 맞은 사람 | 정답 비율 |
| 1 초 | 512 MB | 5346 | 2856 | 2228 | 54.341% |
문제
문자열 S가 주어졌을 때, 이 문자열에서 단어만 뒤집으려고 한다.
먼저, 문자열 S는 아래와 같은 규칙을 지킨다.
- 알파벳 소문자('a'-'z'), 숫자('0'-'9'), 공백(' '), 특수 문자('<', '>')로만 이루어져 있다.
- 문자열의 시작과 끝은 공백이 아니다.
- '<'와 '>'가 문자열에 있는 경우 번갈아가면서 등장하며, '<'이 먼저 등장한다. 또, 두 문자의 개수는 같다.
태그는 '<'로 시작해서 '>'로 끝나는 길이가 3 이상인 부분 문자열이고, '<'와 '>' 사이에는 알파벳 소문자와 공백만 있다. 단어는 알파벳 소문자와 숫자로 이루어진 부분 문자열이고, 연속하는 두 단어는 공백 하나로 구분한다. 태그는 단어가 아니며, 태그와 단어 사이에는 공백이 없다.
입력
첫째 줄에 문자열 S가 주어진다. S의 길이는 100,000 이하이다.
출력
첫째 줄에 문자열 S의 단어를 뒤집어서 출력한다.
제한
예제 입력 |
예제 출력 |
| baekjoon online judge | noojkeab enilno egduj |
| tag | gat |
| ef gh | fe hg |
| one1 two2 three3 4fourr 5five 6six | 1eno 2owt 3eerht rruof4 evif5 xis6 |
| 21474836479223372036854775807 | 74638474127085774586302733229 |
| 17413problem ever | 31471melborp reve |
| < space >space space space< spa c e> | < space >ecaps ecaps ecaps< spa c e> |
풀이 과정
스택을 사용해 문제를 풀었다. '<' 여는 태그가 나올 경우 '>'닫는 태그가 나오기 전까지 문자를 모두 출력해주며 아닐 경우 모두 스택에 넣는다. 그러다 공백을 만나게 된다면 스택에 있는 문자들을 모두 팝 하여 역순으로 출력하고 반복문이 끝날 경우 아직 남아있을 수 있는 문자를 처리하기 위해 한 번 더 출력 메서드를 실행한다.
Java 코드
import java.util.Scanner;
import java.util.Stack;
/* https://www.acmicpc.net/problem/17413
* 단어 뒤집기 2
* 스택 활용
* '<' 를 만났을때 앞에있는 문자를 거꾸로 출력
* */
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
Stack st = new Stack();
boolean flag = false; //태그인지 아닌지 확인용
String a = sc.nextLine();
for (int i = 0; i < a.length(); i++) {
if (a.charAt(i) == '<') { //태그 시작
print(st); // < 검색시 태그 전까지 단어 뒤집기
flag = true;
System.out.print(a.charAt(i));
}
else if (a.charAt(i) == '>') { //태그 끝
flag = false;
System.out.print(a.charAt(i));
}
else if (flag) System.out.print(a.charAt(i)); //태그 안에있을경우 그냥 프린트해버리기
else {
if (a.charAt(i) == ' ') { //공백을 만난다면 모두 팝
print(st);
System.out.print(a.charAt(i));
}
else st.push(a.charAt(i)); //스택에 푸시
}
}
print(st);
}
static void print(Stack st) {
while (!st.empty()) {
System.out.print(st.peek());
st.pop();
}
}
}
반응형
'알고리즘 > 백준' 카테고리의 다른 글
| 백준 : 11651 : 좌표 정렬하기 2 Java (0) | 2023.07.20 |
|---|---|
| 백준 13335 : 트럭 Java (0) | 2023.07.19 |
| 백준 16926 : 배열 돌리기 1 Java (0) | 2023.07.17 |
| 백준 17204 : 죽음의 게임 Java (0) | 2023.07.16 |
| 백준 16931 : 겉넓이 구하기 Java (0) | 2023.07.15 |