티스토리 뷰

Algorithm

[백준] S3 17413 단어 뒤집기 2 (java)

코딩브론즈 2021. 1. 3. 02:42

www.acmicpc.net/problem/17413

 

17413번: 단어 뒤집기 2

문자열 S가 주어졌을 때, 이 문자열에서 단어만 뒤집으려고 한다. 먼저, 문자열 S는 아래와과 같은 규칙을 지킨다. 알파벳 소문자('a'-'z'), 숫자('0'-'9'), 공백(' '), 특수 문자('<', '>')로만 이루어져

www.acmicpc.net

 

풀이

 

1) 결과값을 담을 StringBuffer sb 와 뒤집을 문자열을 담을 StringBuffer temp 생성

2) 입력값의 크기만큼 반복문을 돌거임

2-1) '<' 가 나오면 쌓아둔 temp를 거꾸로 sb에 넣고 '>' 가 나올 때까지 sb에 넣음

2-2) ' ' (공백)이 나오면 쌓아둔 temp를 거꾸로 sb에 넣고 ' ' (공백)을 sb에 넣음

2-3) 그 외엔 temp에 넣음

3) 반복이 끝났는데 temp에 값이 있다면 temp를 거꾸로 sb에 넣음 (맨 끝부분 처리)

4) 출력

 

주의사항

 

1) 마지막에 넣는거 조심

 

package com.baekJoon;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.StringReader;
import java.util.Arrays;

public class BJ_S3_17413_단어뒤집기2 {
	static BufferedReader input = new BufferedReader(new InputStreamReader(System.in));
	public static void main(String[] args) throws IOException {
		input = new BufferedReader(new StringReader(src));
		String str = input.readLine();
		int size = str.length();
		
		StringBuffer sb = new StringBuffer();
		StringBuffer temp = new StringBuffer();
		for(int i=0; i<size; i++) {
			if(str.charAt(i) == '<') { // 꺽새가 나오면
				if(temp.length() != 0) {
					sb.append(temp.reverse()); // temp에 쌓은걸 뒤집어서 저장함
					temp.setLength(0); // <- 새로운 팁을 배웠다.
				}
				for(int j=i; j<size; j++) {
					sb.append(str.charAt(j));
					if(str.charAt(j) == '>') { // 꺽새가 닫힐때 까지 저장
						i = j;
						break;
					}
				}
			}else if(str.charAt(i) == ' '){ // 공백이 나오면
				if(temp.length() != 0) {
					sb.append(temp.reverse()); // temp에 쌓은걸 뒤집어서 저장함
					temp.setLength(0); // <- 새로운 팁을 배웠다.
				}
				sb.append(' '); // 공백을 넣는걸 잊지말자
			}else { // 이제 깡 문자가 나올 경우이다
				temp.append(str.charAt(i));
			}
		}
		if(temp.length() != 0) { // temp가 비어있지 않다면
			sb.append(temp.reverse());
		}
		System.out.println(sb);
	}
	static String src = 
			"<   space   >space space space<    spa   c e>";
}

 

 

후기

 

 역시나 문자열 문제는 풀어도 뭔가 출제자의 의도로 푸는 기분이 들지 않는다.

찾아봤더니 다른사람들은 Stack을 썼더라.. 하지만 내 코드의 속도도 빠른편이라 그냥 두었다.

그리고 이문제로 배운 부분은 StringBuffer를 바로 뒤집어주는 reverse() 기능을 처음써봤다.

또한 StringBuffer를 리셋 시킬 방법을 몰라서 new로 새로 초기화 하려 했지만 구글링 해보니 setLength(0) 이라는 간편한 방법이 있다는것을 알게되었다.

여러모로 배운점이 많은 문제였다.

공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함