문제
풀이
- L : <-
- D : ->
- B :커서 왼쪽 문자 삭제
- P : 커서 왼쪽에 문자 추가
입력:
- 길이 N인 영어 소문자로 이루어진 문자열
- 명령어개수
- 명령어
출력:
- 편집된 문자열
처음 풀었던 방법:
|ㅇ|ㅇ|ㅇ|ㅇ| 길이가 4면 5 가지 경우
0 1 2 3 4 (커서가 맨 마지막오른쪽, 값은 길이와 같음)
|ㅇ 이상태를 기본으로 둔다.
StringBuilder를 사용하여 풀었는데, StringBuilder 사용시 원래 문자열 String은 변하지 않는 것을 유의하여야 한다.
이 방법으로 풀었더니 시간 초과가 나서 다시 풀어야한다.. 참고할 글
코드
틀린 코드
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
public class Main {
public static void main(String[] args) throws IOException{
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String s = br.readLine(); //길이 N인 영어 소문자로 이루어진 문자열
StringBuilder sb = new StringBuilder(s);
int n = Integer.parseInt(br.readLine()); //명령어 개수
int cursor = s.length(); //초기 커서는 문장의 맨 뒤에 위치
for(int i=0; i < n; i++) {
String commandLine = br.readLine();
char command = commandLine.charAt(0);
switch(command) {
case 'L'://커서를 왼쪽으로 한 칸
if(cursor != 0) cursor--;
break;
case 'D': //커서를 오른쪽으로 한 칸
if(cursor != sb.length()) cursor++;
break;
case 'B': //커서 왼쪽 문자 삭제
if(cursor !=0) {
sb.deleteCharAt(cursor-1);
cursor--;
}
break;
case 'P': //커서 왼쪽에 문자 추가
char ch = commandLine.charAt(2);//파라미터 문자
sb.insert(cursor, ch);
cursor++;
}
}
System.out.println(sb.toString());
}
}
'PS(Java) > 백준' 카테고리의 다른 글
[PS] 백준 1158번 요세푸스 (0) | 2022.09.13 |
---|---|
[PS] 백준 1388번 바닥 장식 (0) | 2022.07.06 |
[PS] 백준 11655번 ROT13 (0) | 2022.06.03 |
[PS] 백준 10799번 쇠막대기 (0) | 2022.05.30 |
[PS] 백준 10828번 스택 (0) | 2022.05.25 |