728x90
반응형
2024.08.09기준 - 브론즈2
728x90
백준, BEAKJOON, BOJ, JAVA, 자바
풀이
이 문제는 입력받은 수만큼 문자열과 문자가 들어옵니다.
들어온 문자열에 따라서
- 커서를 기준으로 왼쪽에 문자를 추가합니다.
- 커서를 왼쪽으로 이동합니다. (단, 가장 왼쪽에 있다면 아무런 행동을 하지 않습니다.)
- 커서를 오른쪽으로 이동합니다. (단, 가장 오른쪽에 있다면 아무런 행동을 하지 않습니다.)
이 3가지 문자열에 따라 조건에 맞춰 입력받은 문자열을 그대로 출력하면 되는 문제입니다.
1. 입력받은 케이스가 0이라면 멈추도록 설정합니다.
// 0이 입력되면 멈추도록 설정
while (!(s = br.readLine()).equals("0")) {
}
2. 케이스 수만큼 작동하는 만큼 입력을 받는 반복문을 돌려줍니다.
while (n-- > 0) {
st = new StringTokenizer(br.readLine());
s = st.nextToken();
switch (s) {
case "INSERT": // 문자가 INSERT라면
c = st.nextToken().charAt(0);
if (sub.length() == 0) {
sub.append(c);
} else {
// 현재 문자열에서 커서가 가장 오른쪽에 있다면
if (sub.length() == index) {
sub.replace(index - 1, index, sub.substring(index - 1, index) + c);
// 현재 문자열에서 커서가 중간 어디에 있다면
} else {
sub.replace(index, index + 1, c + sub.substring(index, index + 1));
}
}
index++;
break;
case "LEFT": // 문자가 LEFT 라면 커서를 왼쪽으로 이동
if (index != 0) {
index--;
}
break;
case "RIGHT": // 문자가 RIGHT 라면 커서를 오른쪽으로 이동
if (index != sub.length()) {
index++;
}
break;
}
}
- 입력받은 문자열을 switch를 이용해 구분을 해주었습니다.
- INSERT가 들어온다면 현재 커서 위치에서 왼쪽에 문자열을 추가해줍니다.
- 여기서 커서가 가장 오른쪽에 있다면 맨 뒤에 그대로 문자를 추가해줍니다.
- 오른쪽이 아닌 쪽에 있다면 현재 참조하는 인덱스에서 replace를 이용해 문자를 더 한 뒤 원래 있던 문자를 넣어줘 추가를 해주었습니다.
- LEFT가 들어온다면 현재 커서가 가장 왼쪽이 아니라면 왼쪽으로 한 칸 이동을 해줍니다.
- RIGHT가 들어온다면 현재 커서가 가장 오른쪽이 아니라면 오른쪽으로 한 칸 이동을 해줍니다.
3. 이렇게 완성된 문자열을 출력해줍니다.
sb.append(sub.toString()).append("\n");
코드
package Main;
import java.io.*;
import java.util.*;
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));
StringBuilder sb = new StringBuilder();
String s;
char c;
int n, index;
StringBuilder sub;
StringTokenizer st;
// 0이 입력되면 멈추도록 설정
while (!(s = br.readLine()).equals("0")) {
n = Integer.parseInt(s);
sub = new StringBuilder();
index = 0; // 커서의 위치를 저장할 변수
while (n-- > 0) {
st = new StringTokenizer(br.readLine());
s = st.nextToken();
switch (s) {
case "INSERT": // 문자가 INSERT라면
c = st.nextToken().charAt(0);
if (sub.length() == 0) {
sub.append(c);
} else {
// 현재 문자열에서 커서가 가장 오른쪽에 있다면
if (sub.length() == index) {
sub.append(c);
// 현재 문자열에서 커서가 중간 어디에 있다면
} else {
sub.replace(index, index + 1, c + sub.substring(index, index + 1));
}
}
index++;
break;
case "LEFT": // 문자가 LEFT 라면 커서를 왼쪽으로 이동
if (index != 0) {
index--;
}
break;
case "RIGHT": // 문자가 RIGHT 라면 커서를 오른쪽으로 이동
if (index != sub.length()) {
index++;
}
break;
}
}
sb.append(sub.toString()).append("\n");
}
bw.write(sb.toString());
bw.flush();
bw.close();
br.close();
}
}
728x90
반응형
'코딩테스트 일기 (BAEKJOON)' 카테고리의 다른 글
BEAKJOON / 백준 - JAVA 32076번 Easy as ABC (0) | 2024.08.09 |
---|---|
BEAKJOON / 백준 - JAVA 10026번 적록색약 (0) | 2024.08.09 |
BEAKJOON / 백준 - JAVA 32089번 部員の変遷 (0) | 2024.08.09 |
BEAKJOON / 백준 - JAVA 28419번 더하기 (0) | 2024.08.08 |
BEAKJOON / 백준 - JAVA 22993번 서든어택3 (0) | 2024.08.08 |