Life Engineering
[BOJ 17413] 단어 뒤집기 2 (Java) 본문
https://www.acmicpc.net/problem/17413
import java.util.Scanner;
public class P17413 {
static int loc=0;
static String s;
static StringBuilder sb=new StringBuilder("");
static StringBuilder temp=new StringBuilder("");
public static void main(String[] args) {
Scanner sc=new Scanner(System.in);
s=sc.nextLine();
while (loc<s.length()) {
if (s.charAt(loc)==' ') {
sb.append(temp.reverse());
temp=new StringBuilder("");
sb.append(s.charAt(loc));
}
else if (s.charAt(loc)=='<') {
if (temp.length()!=0) {
sb.append(temp.reverse());
temp=new StringBuilder("");
}
while (s.charAt(loc)!='>') {
sb.append(s.charAt(loc));
loc++;
}
sb.append(s.charAt(loc));
}
else {
temp.append(s.charAt(loc));
}
loc++;
}
if (temp.length()>0) {
sb.append(temp.reverse());
}
System.out.println(sb.toString());
}
}
' '를 만나면 => 그간 저장해둔 문자열을 STtringBuilder의 reverse() 함수를 이용해서 붙여줌
'<'를 만나면=>그간 저장해둔 문자열이 있다면, reverse 해서 붙여주고 '>'를 만날때까지 위치 인덱스를 이동한다.
그 외에는 모두 저장 문자열을 저장하는 변수에 문자를 저장한다.
그런데 이렇게 하면 실행 속도도 오래 걸린다.
다른 분들의 코드를 보니, stack을 이용하면 쉽게 풀 수 있다.
'<'를 만나면 스택에 저장해놓은 문자열을 프린트한다. FILO 구조이므로 저절로 reverse로 출력 가능하다.
그리고 boolean 값으로 true를 만들어, 현재 <> 속에 있음을 나타내고, <>가 있다면 문자 그대로 출력해준다.
'>'를 만나면 false 를 만들어 문자 그대로 출력하는것을 멈춘다.
' '를 만나면 스택을 출력해주고, 그 외에는 스택에 문자를 저장하는 형태이다.
스택을 이용해 reverse 하게 문자열이 출력되도록 했고, '<>' 가 있는 동안은 flag값을 이용해 문자를 그대로 출력하게 하는 방식이다
'Problem Solving' 카테고리의 다른 글
[BOJ 16637] 괄호 추가하기 (Java) (0) | 2022.02.17 |
---|---|
[SWEA 4615] 재미있는 오셀로 게임 (Java) (0) | 2022.02.14 |
[BOJ 16926] 배열 돌리기 1(Java) (0) | 2022.02.11 |
[BOJ 2567] 색종이 - 2 (Java) (0) | 2022.02.10 |
[BOJ 1715] 카드 정렬하기 (Java) (0) | 2022.02.10 |