자바 백준 17413번
실버 3
https://www.acmicpc.net/problem/17413
문제 보기
분류: 구현, 자료 구조, 문자열, 스택
문제 풀기
StringBuilder 를 이용하여 순서 그대로 유지해야할 < > 의 묶음과 순서를 뒤집어야할 묶음을 저장할 변수를 지정한다.
넓은 범위에서 분기는 <> 유무인 Tag 의 상태로 지정한다. "< >" 는 inTag 로 지정하여 시작 "<" 에 대해서는 inTag 를 True 로 지정하고 그 이후의 문자들을 순차적으로 저장한다. 닫히는 ">" 가 나타나면 inTag 를 False 로 변환 후 저장된 문자들을 유지한다.
이후에 들어오는 문자들은 뒤집어야 하는 문자이므로 지속적으로 저장하되, "<" 또는 " "(빈칸) 이 나오면 그 임시저장된 문자열을 reverse() 를 통해 뒤집은후 storedString 에 추가한다. 이때 "<" 이 나오면 태그 시작 형태로 진행하고 " "(빈칸) 이 나오면 다시 뒤집을 문자를 임시저장한다.
끝날때에는 "< >" 를 보장하지 않으므로 저장된 남은 문자열이 있으면 뒤집은 후 추가하고 마무리한다.
코드 보기
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
String S = sc.nextLine(); // 입력 문자열
String result = reverseWords(S); // 주어진 규칙에 의해 문자 뒤집기
System.out.println(result); // 결과 출력
}
public static String reverseWords(String S) {
// StringBuilder 로 문자를 누적 저장
StringBuilder storedString = new StringBuilder(); // 결과 반환을 위한 문자열
StringBuilder word = new StringBuilder(); // 뒤집기 위해 저장된 단어
boolean inTag = false; // < > 로 감싸진 상태 태그로 판별
// 주어진 문자열에서 하나씩 확인
for (int i = 0; i < S.length(); i++) {
char c = S.charAt(i); // 문자 임시 저장
// 입력된 문자 또는 inTag 에 따른 분류
if (c == '<') {
storedString.append(word.reverse()); // 태그 시작으로 지금까지 저장된 단어 뒤집어 저장
word.setLength(0); // 저장된 단어 초기화
storedString.append(c); // '<' 저장
inTag = true; // 태그 시작 표시
} else if (c == '>') {
storedString.append(c); // '>' 저장
inTag = false; // 태그 끝 표시
} else if (inTag) {
storedString.append(c); // 태그 안에 포함된 문자 그대로 저장
} else if (c == ' ') {
storedString.append(word.reverse()); // 빈칸으로 단어가 나뉘는 순간 지금까지 저장된 단어 뒤집어 저장
storedString.append(c); // ' ' 빈칸 저장
word.setLength(0); // 저장된 단어 초기화
} else {
word.append(c); // 위의 경우를 모두 만족하지 않은 상태로 뒤집힐 예약 단어 저장
}
}
storedString.append(word.reverse()); // 마지막에 뒤집을 단어가 있을경우 저장
return storedString.toString();
}
}
'공부하기 > 백준' 카테고리의 다른 글
[Java] 백준 풀기 1927 - 최소 힙 (0) | 2023.06.11 |
---|---|
[Java] 백준 풀기 10952 - A+B 5 (0) | 2023.06.10 |
[Java] 백준 풀기 1924 - 2007년 (0) | 2023.06.08 |
[Java] 백준 풀기 10988 - 팰린드롬인지 확인하기 (0) | 2023.06.07 |
[Java] 백준 풀기 1463 - 1로 만들기 (0) | 2023.06.06 |