티스토리 뷰
두 가지 방법으로 풀 수 있는 문제
풀이
기본적으로 readLine()
으로 String
을 입력받은 후 charAt(index)
method를 이용하여 한 문자씩 비교한다.
1. StringBuilder의 substring(startIndex, endIndex), reverse() method를 이용한 풀이
mark
라는 변수를 두어 >
가 어느 위치에 있는지 기억한다.
문자열 길이만큼 반복문을 수행한다.
substring
method를 사용하다 보면 헷갈리는데 endIndex는 (자르려는 문자열의 마지막 문자의 인덱스) + 1
이다.
즉, 범위가 [시작 인덱스, 끝 인덱스)
이다.
<
를 만났을 경우substring(mark + 1, (현재 인덱스))
가 기존의 문자열이 되므로reverse()
하여 정답에append
한다.>
를 만날 때 까지 인덱스를 증가시키며 문자를 정답에append
한다.mark
값을>의 인덱스
로 갱신한다.
' '
을 만났을 경우substring(mark + 1, (현재 인덱스))
가 기존의 문자열이 되므로reverse()
하여 정답에append
한다.mark
값을' '의 인덱스
로 갱신한다.
<>
가 안 나올수도 있으므로 마지막에 substring(mark + 1)
을 reverse()
한 문자열을 정답에 append
한다.
2. Stack을 이용한 풀이
문자열 길이만큼 반복문을 수행한다.
<
를 만났을 경우Stack
이 빌때까지 정답에append
한다.>
를 만날 때 까지 인덱스를 증가시키며 문자를 정답에append
한다.인덱스++
의 조건으로 반복문을 수행했기 때문에 현재 인덱스의 문자를 정답에append
한다.
' '
을 만났을 경우Stack
이 빌때까지 정답에append
한다.
- 1, 2가 아닌 경우
Stack
에 현재 인덱스의 문제를push
한다.
마지막에 Stack
이 빌때까지 정답에 append
한다.
코드1 (reverse() method)
import java.util.*;
import java.io.*;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
String str = br.readLine();
StringBuilder sb = new StringBuilder();
StringBuilder temp;
int mark = -1;
for (int i = 0; i < str.length(); i++) {
condition:
if (str.charAt(i) == '<') {
temp = new StringBuilder(str.substring(mark + 1, i));
sb.append(temp.reverse());
while (str.charAt(i) != '>')
sb.append(str.charAt(i++));
mark = i;
sb.append(str.charAt(i));
}
if (str.charAt(i) == ' ') {
if (mark + 1 == i) {
sb.append(str.charAt(i));
mark = i;
}
else {
temp = new StringBuilder(str.substring(mark + 1, i));
sb.append(temp.reverse());
sb.append(str.charAt(i));
mark = i;
}
}
}
temp = new StringBuilder(str.substring(mark + 1));
sb.append(temp.reverse());
bw.write(sb.toString());
br.close();
bw.close();
}
}
코드2 (Stack)
import java.util.*;
import java.io.*;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
String str = br.readLine();
StringBuilder sb = new StringBuilder();
Stack<Character> s = new Stack<>();
for (int i = 0; i < str.length(); i++) {
if (str.charAt(i) == '<') {
while(!s.isEmpty()) sb.append(s.pop());
while(str.charAt(i) != '>') sb.append(str.charAt(i++));
sb.append(str.charAt(i));
}
else if (str.charAt(i) == ' ') {
while(!s.isEmpty()) sb.append(s.pop());
sb.append(str.charAt(i));
} else s.push(str.charAt(i));
}
while(!s.isEmpty()) sb.append(s.pop());
bw.write(sb.toString());
br.close();
bw.close();
}
}
'알고리즘' 카테고리의 다른 글
[백준] 3055. 탈출 (Java) (0) | 2021.01.24 |
---|---|
[백준] 16234. 인구이동 (Java) (0) | 2021.01.13 |
[백준] 14500. 테트로미노 (Java) (0) | 2020.12.27 |
[백준] 2290. LCDTest (Java) (1) | 2020.12.23 |
[백준] 2933. 미네랄 (0) | 2020.12.20 |
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- 해시
- matches
- BFS
- 백준
- 문자열
- 이분탐색
- 구현
- form
- 삼성역테기출
- 프로그래머스
- 그래프
- vue.js
- 우선순위큐
- dfs
- 브루트포스
- CustomHook
- java
- 백트래킹
- 알고리즘
- REACT
- 다익스트라
- web
- 시뮬레이션
- 정규식
- swea
- Validation
- regex
- dp
- 벨만포드
- BigInteger
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
글 보관함