Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- Dynamic Programming
- 다이내믹프로그래밍
- 알고리즘공부
- 싸피
- TCP
- Java
- 코딩테스트
- SSAFY
- 개발공부
- 클라이언트
- IP
- 스프링 부트와 AWS로 혼자 구현하는 웹 서비스
- 자바
- 정렬
- 코딩공부
- cs공부
- 네트워크
- DP
- 네트워크모델
- Lan
- BAEKJOON
- 서버
- 스프링
- 백준
- 구현
- 전송계층
- 개발자
- Spring
- 프로토콜
- 알고리즘
Archives
- Today
- Total
오늘 하루, develop
백준 17413번 - 단어 뒤집기 2 (java) 본문
https://www.acmicpc.net/problem/17413
17413번: 단어 뒤집기 2
문자열 S가 주어졌을 때, 이 문자열에서 단어만 뒤집으려고 한다. 먼저, 문자열 S는 아래와과 같은 규칙을 지킨다. 알파벳 소문자('a'-'z'), 숫자('0'-'9'), 공백(' '), 특수 문자('<', '>')로만 이루어져
www.acmicpc.net
💡 아이디어
- 단어는 뒤집고 태그는 그대로 출력하는 문제
- 단어를 편하기 뒤집기 위해 단어를 StringBuilder에 저장해야겠다고 생각했다.
- if문을 활용해 단어는 word에, 태그는 tag에 저장하고 단어 또는 태그가 끝나면 result에 저장했다. (사실 태그는 뒤집을 필요가 없어서 바로 result에 저장해도 된다.)
💡 코드
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
public class BOJ_S3_17413_단어뒤집기2 {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String str = br.readLine() + " "; //마지막 단어 또는 태그가 result에 저장되게 하기 위해 가장 뒤에 공백 추가
char[] input = str.toCharArray();
StringBuilder result = new StringBuilder(); //최종 결과
StringBuilder word = new StringBuilder(); //단어
StringBuilder tag = new StringBuilder(); //태그
boolean inTag = false;
for (int i = 0; i < input.length; i++) {
if (input[i] == '<') { //태그가 시작되는 경우
//태그가 시작되기 직전까지의 내용은 뒤집어서 result에 저장
word = reverseWord(word.toString());
result.append(word);
//word 초기화
word = new StringBuilder();
//태그가 시작됨 표시
inTag = true;
}
//태그 내부의 내용인 경우 tag에 저장
if (inTag) {
tag.append(input[i]);
}
if (input[i] == '>') { //태그가 끝나는 경우
//result에 그대로 저장
result.append(tag);
//tag 초기화
tag = new StringBuilder();
//태그가 종료됨 표시
inTag = false;
}
if (!inTag && input[i] == ' ') { //태그 밖에서 공백을 만난 경우
//하나의 단어가 끝났으르모 뒤집어서 result에 저장
word = reverseWord(word.toString());
result.append(word);
//word 초기화
word = new StringBuilder();
//빈칸 결과에 추가
result.append(input[i]);
}
if (!inTag && input[i] != ' ' && input[i] != '<' && input[i] != '>') { //단어에 포함된 문자인 경우
//word에 저장
word.append(input[i]);
}
}
//마지막 부분에 word 또는 tag가 있으므로 저장
result.append(word);
result.append(tag);
//처음에 추가한 마지막 공백 제거
String rresult = result.substring(0, result.length() - 1);
System.out.println(rresult);
}
//단어를 뒤집는 함수
private static StringBuilder reverseWord(String word) {
StringBuilder reverseWord = new StringBuilder();
for (int i = word.length() - 1; i >= 0; i--) {
reverseWord.append(word.charAt(i));
}
return reverseWord;
}
}
'알고리즘' 카테고리의 다른 글
백준 11501번 - 주식 (java) (0) | 2024.02.20 |
---|---|
백준 3613번 - Java vs C++ (java) (0) | 2024.02.15 |
백준 1021번 - 회전하는 큐 (java) (0) | 2024.02.12 |
백준 2108번 - 통계학(java) (0) | 2024.02.11 |
백준 2223번 - 금화 (java) (0) | 2024.02.05 |