반응형
츄르사려고 코딩하는 코집사입니다.
1. [백준 알고리즘] 백준 17413번 단어 뒤집기 2 자바(Java)
1) 문제번호 : 17413번
2) 문제 출처
2. 문제
문자열 S가 주어졌을 때, 이 문자열에서 단어만 뒤집으려고 한다.
먼저, 문자열 S는 아래와과 같은 규칙을 지킨다.
- 알파벳 소문자('a'-'z'), 숫자('0'-'9'), 공백(' '), 특수 문자('<', '>')로만 이루어져 있다.
- 문자열의 시작과 끝은 공백이 아니다.
- '<'와 '>'가 문자열에 있는 경우 번갈아가면서 등장하며, '<'이 먼저 등장한다. 또, 두 문자의 개수는 같다.
태그는 '<'로 시작해서 '>'로 끝나는 길이가 3 이상인 부분 문자열이고, '<'와 '>' 사이에는 알파벳 소문자와 공백만 있다. 단어는 알파벳 소문자와 숫자로 이루어진 부분 문자열이고, 연속하는 두 단어는 공백 하나로 구분한다. 태그는 단어가 아니며, 태그와 단어 사이에는 공백이 없다.
3. 제약사항
-
4. 입력
첫째 줄에 문자열 S가 주어진다. S의 길이는 100,000 이하이다.
5. 출력
첫째 줄에 문자열 S의 단어를 뒤집어서 출력한다.
6. 풀이
- 문자열을 거꾸로 출력하는 것은 Stack을 활용하면 된다.
- 그리고, 태그 안과 밖을 구분하는 boolean형 변수를 하나 만들어서 태그 안에 있으면 true, 밖이면 false로 둔다.
- 먼저, '<'이 오면 Stack에 저장되어 있는 것들을 먼저 다 출력한다. Stack이 빌 때까지.
- '>'이 오면 그대로 출력
- 태그 안에 있으면 문자열을 그대로 출력
- 태그 밖에 있으면서 공백이 오면 스택에 있는 것들을 빌 때까지 pop하여 출력하고, 공백이 아니면 스택에 push를 한다.
7. 소스 코드
import java.util.*;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
String S = sc.nextLine();
Stack<Character> stk = new Stack<>();
//<> 안에 안에 있는지 밖에 있는지 구분
//안이면 true, 밖이면 false
boolean inout = false;
//S를 하나씩 탐색
for (int i = 0; i < S.length(); i++) {
//'<'이게 오면
if (S.charAt(i) == '<') {
inout = true; // 태그 안
//스택에 저장되어 있는거를 다 pop하면서 출력
while (!stk.isEmpty()) {
System.out.print(stk.pop());
}
//'<'기호 표시
System.out.print(S.charAt(i));
}
//'>' 이게 오면
else if(S.charAt(i)=='>') {
inout = false;
System.out.print(S.charAt(i));
}
// <>안에 있으면
else if(inout) {
//순서 그대로 출력
System.out.print(S.charAt(i));
}
// <>밖에 있으면
else if(!inout) {
//공백이라면
if(S.charAt(i)==' ') {
//스택에 저장되어 있는거를 다 pop하면서 출력
while (!stk.isEmpty()) {
System.out.print(stk.pop());
}
//공백 출력
System.out.print(S.charAt(i));
}
//공백이 아니면
else {
//스택에 넣기
stk.push(S.charAt(i));
}
}
}
//나머지 스택에 저장되어 있는거를 다 pop하면서 출력
while (!stk.isEmpty()) {
System.out.print(stk.pop());
}
}
}
반응형
'알고리즘 > 백준 알고리즘' 카테고리의 다른 글
[백준 알고리즘] 백준 2605번 줄 세우기 자바(Java) (0) | 2021.02.25 |
---|---|
[백준 알고리즘] 백준 2669번 직사각형 네개의 합집합의 면적 구하기 자바(Java) (0) | 2021.02.25 |
[백준 알고리즘] 백준 13458번 시험 감독 자바(Java) (0) | 2021.02.25 |
[백준 알고리즘] 백준 8320번 직사각형을 만드는 방법 자바(Java) (0) | 2021.02.23 |
[백준 알고리즘] 백준 11399번 ATM 자바(Java) (0) | 2021.02.23 |
[백준 알고리즘] 백준 2477번 참외밭 자바(Java) (0) | 2021.02.22 |
[백준 알고리즘] 백준 20540번 연길이의 이상형 자바(Java) (0) | 2021.02.21 |
[백준 알고리즘] 백준 13300번 방 배정 자바(Java) (0) | 2021.02.21 |
최근댓글