제로베이스 백엔드 스쿨에서 연습문제가 나오길래 한번 풀어보았다.
편집기에는 문자열과 편집 명령어가 주어지는데, 명령어의 동작은 다음과 같다고 한다.
L : 커서를 왼쪽으로 한칸 이동(커서가 문장의 맨 앞이면 무시)
D : 커서를 오른쪽으로 한칸 이동(커서가 문장의 맨 뒤이면 무시)
B : 커서 왼쪽에 있는 문자를 삭제(커서가 문장의 맨 앞이면 무시)
P x : x라는 문자를 커서 왼쪽에 추가
커서의 시작은 문자열에서 편집이 시작되는 위치가 시작점이다.
초기 문자열과 명령어가 주어졌을 때 결과를 출력하라
라는 문제이다.
초기 문자열 | 명령어 | 결과 출력 |
"aba" | "L B" | "aa" |
"abcd" | "P x L P y" | "abcdyx" |
이런식으로 되어야하는데 나는 어떻게 풀었냐면
public class Test {
public static void solution(String s,String command) {
// 커서의 위치를 체크, 커서의 시작점은 인덱스로 치면 주어진 문자열의 길이와 동일
int cursor = s.length();
char[] arr = command.toCharArray();
char[] word = s.toCharArray();
ArrayList<Character> list = new ArrayList<>();
for (char c : word) {
list.add(Character.valueOf(c));
}
for (char c : arr) {
switch (c) {
case 'L':
if (cursor == 0) {
continue;
}
cursor -= 1;
break;
case 'D':
if (cursor == s.length() - 1) {
continue;
}
cursor += 1;
break;
case 'B':
if (cursor == 0) {
continue;
}
list.remove(cursor-1);
break;
case 'P':
break;
case ' ' :
continue;
default:
list.add(cursor,c);
cursor+=1;
break;
}
}
String answer = "";
for (Character character: list) {
answer += character;
}
System.out.println(answer);
}
public static void main(String[] args) {
solution("abcd", "P x L P y");
solution("abc", "L L L P x L B P y");
}
}
이거를 굳이 char로 쓸 필요 없는 것 같아서
public class Test {
public static void solution(String s,String command) {
// 커서의 위치를 체크, 커서의 시작점은 인덱스로 치면 주어진 문자열의 길이와 동일
int cursor = s.length();
String[] commandArr = command.split(" ");
String[] wordArr = s.split("");
// Arrays.asList(wordArr)로 하려그랬는데 에러뜬다..
List<String> list = Arrays.stream(wordArr).collect(Collectors.toList());
for (String c : commandArr) {
switch (c) {
case "L":
// 커서가 맨왼쪽에 있으면 그냥 통과
if (cursor == 0) {
continue;
}
// 맨왼쪽아니면 cursor를 왼쪽으로 한칸 이동
cursor -= 1;
break;
case "D":
// 커서가 맨 오른쪽이면 통과
if (cursor == s.length() - 1) {
continue;
}
// 아니면 커서를 오른쪽으로 한칸 이동
cursor += 1;
break;
case "B":
// 커서가 맨왼쪽이면 삭제하지않고 통과
if (cursor == 0) {
continue;
}
// 커서의 왼편 삭제
list.remove(cursor-1);
break;
case "P":
break;
default:
// 정의된 명령어 외의 값이 들어오면 추가
list.add(cursor,c);
// 커서자리에 추가되었으니 커서를 한칸 오른쪽으로 이동
cursor+=1;
break;
}
}
String answer = "";
for (String s1 : list) {
answer += s1;
}
System.out.println(answer);
}
public static void main(String[] args) {
solution("abcd", "P x L P y");
solution("abc", "L L L P x L B P y");
}
}
'TIL' 카테고리의 다른 글
파스칼의 삼각형 (0) | 2022.04.01 |
---|---|
컬렉션에서 중복값 찾아내기 (0) | 2022.03.30 |
원시값 배열을 Stream을 이용해서 리스트로 바꾸기 (0) | 2022.03.30 |
자바 기초 문제 - 사탕 나눠 주기 (0) | 2022.03.30 |
자바 char 배열을 List로 변환하기(Stream으로 변환하기) (0) | 2022.03.29 |
댓글