삽질도사

[백준] 단어뒤집기2 17413 자바 본문

백준

[백준] 단어뒤집기2 17413 자바

전성진블로그 2021. 3. 16. 20:09

스택을 사용하면 편하게 풀 수 있는 문제였습니다.

단번에 풀기는 어렵지만, 처음에 코드를 계획할 때 잘 구상하였다면,

큰 오류없이 해결할 수 있습니다.

 

태그자체도 결과에 나와야한다는 조건을 뒤늦게 보는 바람에 계획이 틀어졌지만,

원래의 코드와 큰 차이가 없어서 추가적으로 코드를 작성하는 것으로써 다행히 쉽게 수정할 수 있었습니다.

 

또한 태그의 앞뒤로는 공백이 없이 결과값이 나와야 하기에 그 부분이 조금 애를 먹었지만, 금방 해결봤습니다.

 

일반적인 경우를 함수로 놓고, 태그를 만났을 때에 그 함수를 사용하는 것이 좀 더 깔끔한 코드가 될 것 같습니다만,

저는 뒤늦게 깨달아서 빨리 풀려고 이대로 제출했습니다.

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Stack;

public class 단어뒤집기2 {

	static String str, res = "";
	static Stack<Character> stk = new Stack<>();
	static int idx;

	public static void main(String[] args) throws IOException {

		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		str = br.readLine();

		for (int x = 0; x < str.length(); x++) {

			char next = str.charAt(x);

			if (next == ' ') { //공백
				write(); // 단어 뒤집기
				res+=" "; // 공백을 만나서 뒤집었다면 공백이 필요 (참고: 꺽쇠라면 필요 x)
				continue;
			}
			if (next == '<') { //꺽쇠
				write(); // 단어 뒤집기
				
				for(int q = x; q<str.length(); q++) { //닫히는 꺽쇠만날 때까지
					
					char in_next = str.charAt(q);
					res+=in_next; //태그안에 내용은 그대로 저장
					
					if(in_next == '>') { //닫히는 꺽쇠 인덱스로 변환
						x = q;
						break;
					}
				}
				
				continue;
				
			}

			stk.add(next); //아무것도 아니면 그냥 스택에 저장
		}
		
		write();
		System.out.println(res);

	}

	private static void write() { //스택을 모두 팝함으로써 단어 뒤집음
		
		while (!stk.isEmpty()) {
			res += stk.pop();
		}
		
	}
	
}

'백준' 카테고리의 다른 글

[백준] 빗물 14719 자바  (0) 2021.03.24
[백준] 달력 20207 자바  (0) 2021.03.23
[백준] 배열돌리기1 16926 자바  (0) 2021.03.12
[백준] 행복 유치원 13164 자바  (0) 2021.03.12
[백준] 파일정리 20291 자바  (0) 2021.03.12