BOJ1406-에디터
by EunHye Jung
BOJ1406 에디터
문제
풀이코드
- 처음엔 LinkedList와 int형 cursor변수를 가지고 풀었는데, 시간초과가 떴다.
- cursor을 가지고 매번 LinkedList에 접근하는것도 cursor만큼의 연산을 수행한다는게 문제였는데, 연산을 계속 하더라도 계속해서 커서의 위치를 가져가는게 관건이었다. 구글링의 힘을 빌려 ListIterator라는 것을 알게 되서 이것을 이용해서 문제를 해결할 수 있었다.
class Editor {
public static final String MOVE_LEFT = "L";
public static final String MOVE_RIGHT = "D";
public static final String DELETE = "B";
public static final String ADD = "P";
private List<Character> charList;
private ListIterator<Character> listIteartor;
public Editor(String input) {
this.charList = new LinkedList<>();
listIteartor = charList.listIterator(charList.size());
for (int i = 0; i < input.length(); i++) {
listIteartor.add(input.charAt(i));
}
}
public void executeCmd(String[] cmd) {
switch (cmd[0]) {
case MOVE_LEFT:
if (listIteartor.hasPrevious()) {
listIteartor.previous();
}
return;
case MOVE_RIGHT:
if (listIteartor.hasNext()) {
listIteartor.next();
}
return;
case DELETE:
if (listIteartor.hasPrevious()) {
listIteartor.previous();
listIteartor.remove();
}
return;
case ADD:
listIteartor.add(cmd[1].charAt(0));
return;
}
}
public String getStr() {
StringBuffer str = new StringBuffer();
for (char ch : charList) {
str.append(ch);
}
return str.toString();
}
}
배운점
- ListIterator에 대해서 알게 되었다.
- 다른사람들의 풀이를 보니 Stack 2개를 이용해서 푸는사람도 있었고, Node클래스를 따로 만들어서 Node배열을 가지고 푼사람도 있었는데 이경우 실행속도가 훨씬빨랐다! 다른 방법을 시도해서 문제를 풀어봐야겠다.
Subscribe via RSS