전체 방문자
오늘
어제
모달조아
Better than yesterday
모달조아
  • 분류 전체보기 (147)
    • PS (86)
      • BOJ (79)
      • 프로그래머스 (6)
    • 이론 (41)
      • 자료구조 (2)
      • 알고리즘 (8)
      • 데이터베이스 (1)
      • 운영체제 (1)
      • 네트워크 (3)
      • 디자인패턴 (7)
      • Java (13)
      • Spring (4)
      • JPA (1)
      • Git (1)
    • 개발 (18)
    • 프로젝트 (1)
    • 기록 (0)
      • 후기 (0)
    • etc (1)

최근 글

티스토리

hELLO · Designed By 정상우.
모달조아

Better than yesterday

PS/BOJ

BOJ 1406 에디터 [Java]

2021. 7. 22. 23:09

BOJ 1406 에디터

- 문제 링크

https://www.acmicpc.net/problem/1406

- 문제 해설

java 내의 LinkedList를 이용하여 풀었다. ListIterator는 Iterator와는 다르게 양방향으로 원소에 접근이 가능하기에 ListIterator를 이용하였다.
18-19줄에서 커서를 맨 뒤로 보내는 작업을 먼저 해주고, 그 후 각 명령이 들어오면 그에 맞게 동작하도록 구현하였다.
ListIterator 내부에 현재 보고 있는 위치를 가리키는 cursor가 있어서 메소드를 활용하면 쉽게 해결할 수 있는 문제였다.
문제에서 사용한 메소드들만 정리해보겠다.

- hasNext() : iterator가 리스트를 순방향으로 순회할 때 다음 원소가 있으면 true를 없으면 false를 반환함
- hasPrevious() : iterator가 리스트를 역방향으로 순회할 때 다음 원소가 있으면 true를 없으면 false를 반환함
- next() : 리스트의 다음 원소를 반환하고, 커서의 위치를 순방향으로 이동시킴
- previous() : 리스트의 이전 원소를 반환하고, 커서의 위치를 역방향으로 이동시킴
- remove() : next()나 previous() 메소드에 의해 반환된 가장 마지막 요소를 리스트에서 제거함

- 코드 보기

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));
        String str = br.readLine();
        int m = Integer.parseInt(br.readLine());

        LinkedList<Character> list = new LinkedList<Character>();
        for (int i = 0; i < str.length(); i++)
            list.add(str.charAt(i));

        ListIterator<Character> it = list.listIterator();
        while (it.hasNext())
            it.next();

        for (int i = 0; i < m; i++)
        {
            String com = br.readLine();
            char c = com.charAt(0);
            if (c == 'P')
                it.add(com.charAt(2));
            else if (c == 'L')
            {
                if(it.hasPrevious())
                    it.previous();
            }
            else if (c == 'D')
            {
                if (it.hasNext())
                    it.next();
            }
            else if (c == 'B')
            {
                if (it.hasPrevious())
                {
                    it.previous();
                    it.remove();
                }
            }
        }

        for (Character ch : list)
            bw.write(ch);
        br.close();
        bw.flush();
        bw.close();
    }
}
저작자표시 (새창열림)

'PS > BOJ' 카테고리의 다른 글

BOJ 2003 수들의 합 2 [Java]  (0) 2021.07.24
BOJ 1158 요세푸스 문제 [Java]  (0) 2021.07.23
BOJ 11656 접미사 배열 [Java]  (0) 2021.07.22
BOJ 11655 ROT13 [Java]  (0) 2021.07.21
BOJ 10820 문자열 분석 [Java]  (0) 2021.07.21
    'PS/BOJ' 카테고리의 다른 글
    • BOJ 2003 수들의 합 2 [Java]
    • BOJ 1158 요세푸스 문제 [Java]
    • BOJ 11656 접미사 배열 [Java]
    • BOJ 11655 ROT13 [Java]
    모달조아
    모달조아

    티스토리툴바