문제 링크
주의사항
- JAVA를 사용하여 프로그램을 사용하였습니다.
- 백준에서 코드를 작성하였을 때 아래 형태에서 Main에서 결과가 출력되어야 합니다.
public class Main{
public static void main(String[] args){
}
}
문제 설명
접근 방법
이 문제에 핵심
1. 입력되는 문자열은 알파벳 소문자, 숫자, 공백, 특수문자(<, >)로만 이루어져있습니다.
2. 문자열의 단어들을 조건에 맞게 뒤집은 결과를 출력합니다.
3. <, >으로 둘러싼 단어는 뒤집기를 진행하지 않습니다.
알고리즘 진행 순서.
1. 입력된 문자열을 저장합니다.
2. 조건에 맞게 단어들을 뒤집기를 진행합니다.
3. 뒤집기가 종료된 문자열을 결과로 출력합니다.
뒤집기
단어에 대한 순서를 반대로 바꾸는 것입니다.
단어에 정보를 StringBuilder에 저장하여 reverse()라는 Method를 사용하여 뒤집도록 하였습니다.
※문제에 조건에서는 <, >로 덮인 단어는 뒤집기를 진행하지 않습니다.
단어 : abc
뒤집기 : cba
예제입력 3.
1. 입력된 문자열을 저장합니다.
<ab cd>ef gh <ij jk>
2. 조건에 맞게 단어들을 뒤집기를 진행합니다.
<ab cd>ef gh <ij jk>
단어 : <ab cd>, ef, gh, <ij jk>
뒤집기 진행
<ab cd> : <, > 덮인 단어로 뒤집기 X
ef : fe
gh : hg
<ij jk> : <, > 덮인 단어로 뒤집기 X
단어 합치기
<ab cd>ef hg<ij jk>
3. 뒤집기가 종료된 문자열을 결과로 출력합니다.
<ab cd>ef hg<ij jk>을 결과로 출력합니다.
- BufferedReader를 사용하여 입력되는 문자열을 저장합니다.
- for문을 통해서 각 단어들이 덮인 단어, 일반 단어로 구분하여 뒤집기를 진행하였습니다.
- 모든 뒤집기가 종료된 후에 문자열을 BufferedWriter 저장하였습니다.
- BufferedWriter에 저장된 결과값을 출력하였습니다.
import java.io.*;
import java.util.StringTokenizer;
public class Main {
public static void main(String[] args) throws IOException {
//입력값 처리하는 BufferedReader
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
//결과값 출력하는 BufferedWriter
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
String input = br.readLine(); //입력되는 문자열 저장
boolean check = false; //<, > 에 덮인 단어인지 확인하는 변수
StringBuilder sb = new StringBuilder(); //뒤집기를 진행한 문자열 저장
StringBuilder temp = new StringBuilder(); //현재 단어 저장
//문자열 각 글자 탐색!
for(int i=0;i<input.length();i++){
char c = input.charAt(i);
if(c=='<'){ //'<'일 경우 덮인 단어로 진행
check = true; //덮인 단어 확인
sb.append(temp.reverse()); //이전 단어 뒤집기 진행
sb.append(c); //'<' 추가
temp = new StringBuilder(); //현재 단어 초기화
}else if(c=='>'){ //'>' 덮인 단어 종료시
check = false; //덮인 단어 취소
sb.append(temp).append(c); //덮인 단어 추가
temp = new StringBuilder(); //현재 단어 초기화
}else if(c==' '){
if(check) //덮인 단어 안에 ' '인 경우
temp.append(c);
else{ //덮인 단어가 아닌 ' '인 경우
sb.append(temp.reverse()).append(c); //이전 단어 뒤집기 진행
temp = new StringBuilder(); //현재 단어 초기화
}
}else
temp.append(c); //현재 단어의 글자 추가
}
if(!temp.equals("")) //마지막 단어가 남은 경우
sb.append(temp.reverse());
bw.write(sb.toString()); //뒤집은 문자열 BufferedWriter 저장
bw.flush(); //결과 출력
bw.close();
br.close();
}
}
'백준' 카테고리의 다른 글
[백준] code.plus(브루트 포스 Part 2,JAVA)16987번, 계란으로 계란치기 (0) | 2022.09.21 |
---|---|
[백준] 알고리즘 분류(문자열,JAVA)15829번, Hashing (2) | 2022.09.20 |
[백준] 알고리즘 분류(문자열,JAVA)2754번, 학점계산 (0) | 2022.09.18 |
[백준] 알고리즘 분류(문자열,JAVA)1373번, 2진수 8진수 (0) | 2022.09.18 |
[백준] 알고리즘 분류(문자열,JAVA)2744번, 대소문자 바꾸기 (2) | 2022.09.16 |
댓글