[ 기타 ]/코딩테스트

[백준/JAVA] 5430번 AC / 데크, 자료구조

2023. 6. 7. 22:56
목차
  1. 문제
  2. 테스트케이스
  3. 알고리즘 분류
  4. 자료구조 초기화
  5. 커맨드 실행
  6. 출력
  7. 주의사항
  8. Code

문제

테스트케이스

첫째줄 (4) : 테스트 케이스 개수

각 테스트 케이스

  1. R과 D로 이루어진 명령어
  2. 배열의 길이
  3. 배열(문자열로 주어진 배열)

알고리즘 분류

구현, 자료구조, 문자열, 파싱, 데크


자료구조 초기화

substring()을 통해 맨 앞에 ' [ ' , '  ] ' 을 잘라내고, ' , '을 구분자로 하여 split(",")으로 문자열을 쪼개주었다.

여기서 주의할 점은 만약 입력받은 배열 String의 길이가 2인 경우 "[ ]" 으로,  해당 연산을 할 경우 오류가 생긴다.

따라서 arrStr.length() > 2 라는 조건을 걸고 deque에 추가해준다.

//arrStr = 입력받은 배열 String
Deque<Integer> deque = new LinkedList<>();
if(arrStr.length() > 2){
    String[] split = arrStr.substring(1,arrStr.length()-1).split(",");
    for (int i=0;i< split.length;i++){
        deque.addLast(Integer.parseInt(split[i]));
    }
}

커맨드 실행

isReverse라는 flag를 통해 지금 배열이 커맨드 R로 인해 reverse 된 상태인지 체크한다.

만약 isReverse = true 라면, 데크에서 pollLast를 이용해서 뒤에서 값을 삭제하고,

isReverse = false 라면, 데크에서 pollFirst를 이용해서 앞에서 값을 삭제한다.

 

만약 데크가 비어있는 상태에서 커맨드 D 가 들어오면 isError flag를 true로 바꿔주고 커맨드 반복문을 종료한다.


 

출력

커맨드 연산을 모두 끝낸 상태에서 isReverse 여부를 확인하여 각 다르게 출력한다.

isReverse = true인 경우 pollLast를 이용하여 뒤에서부터 값을 빼며 출력하고,

isReverse = false인 경우 pollfirst를 이용하여 앞에서부터 값을 빼며 출력한다.

 

출력은 StringBuilder를 이용하는데, public class에 static 변수로 만들어놓은 StringBuilder에 append하고, 마지막에 한번에 출력한다.


주의사항

  • 배열의 크기가 0인 상태에서의 커맨드 명령어 주의
  • 배열의 크기가 0일때 문자열 파싱 주의
  • 마지막에 출력할때, 배열의 크기가 0인 경우 주의

Code

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Deque;
import java.util.LinkedList;

public class No5430 {
    static StringBuilder sb = new StringBuilder();
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader((System.in)));
        int N = Integer.parseInt(br.readLine());

        for (int k = 0; k < N; k++) {
            //케이스 시작
            boolean isError = false;
            //입력부
            String cmd = br.readLine();//커맨드
            int n = Integer.parseInt(br.readLine());//배열의 길이
            String arrStr = br.readLine();//배열 문자열
            char[] chars = cmd.toCharArray();

            //배열 만들기
            Deque<Integer> deque = new LinkedList<>();

            if(arrStr.length() > 2){
                String[] split = arrStr.substring(1,arrStr.length()-1).split(",");
                for (int i=0;i< split.length;i++){
                    deque.addLast(Integer.parseInt(split[i]));
                }
            }

            //커맨드 실행
            boolean isReverse = false;
            for(int i=0;i<chars.length;i++){
                char ch = chars[i];
                if(ch == 'R'){
                    if(isReverse){
                        isReverse = false;
                    }else{
                        isReverse = true;
                    }
                }else if(ch == 'D'){
                    if(deque.isEmpty()){
                        isError = true;
                        break;
                    }else if(isReverse){
                        deque.pollLast();
                    }else{
                        deque.pollFirst();
                    }
                }else{
                    isError = true;
                    break;
                }
            }
            if (isError){
                sb.append("error\n");
            }else{
                print(deque,isReverse);
            }
            //케이스 끝
        }
        System.out.println(sb);
    }

    static void print(Deque<Integer> deque, boolean isReverse){

        if(deque.size() == 0){
            sb.append("[]\n");
            return;
        }
        sb.append("[");
        int size = deque.size();
        if(isReverse){
            for(int i=0;i<size-1;i++){
                sb.append(deque.pollLast()).append(",");
            }
        }else{
            for(int i=0;i<size-1;i++){
                sb.append(deque.pollFirst()).append(",");
            }
        }
        sb.append(deque.poll()+"]\n");
    }

}
반응형
저작자표시 (새창열림)

'[ 기타 ] > 코딩테스트' 카테고리의 다른 글

[백준/Java] 11000번 : 강의실 배정 / 그리디 알고리즘  (0) 2023.06.26
[JAVA/String] 알고리즘 문제풀이 시 유용한 String 문자열 다루기  (0) 2023.06.09
[JAVA] 코딩테스트 문제 풀이시 유용한 [ 람다식, 스트림 ] 사용 예제 모음  (0) 2023.06.07
[백준/JAVA] 11866번 : 요세푸스문제 0 / Queue 자료구조  (0) 2023.06.05
[백준/JAVA] 2805번 : 나무 자르기 (이분탐색)  (0) 2023.06.03
  1. 문제
  2. 테스트케이스
  3. 알고리즘 분류
  4. 자료구조 초기화
  5. 커맨드 실행
  6. 출력
  7. 주의사항
  8. Code
'[ 기타 ]/코딩테스트' 카테고리의 다른 글
  • [백준/Java] 11000번 : 강의실 배정 / 그리디 알고리즘
  • [JAVA/String] 알고리즘 문제풀이 시 유용한 String 문자열 다루기
  • [JAVA] 코딩테스트 문제 풀이시 유용한 [ 람다식, 스트림 ] 사용 예제 모음
  • [백준/JAVA] 11866번 : 요세푸스문제 0 / Queue 자료구조
HSRyuuu
HSRyuuu
Web Backend Developer happyhsryu
HSRyuuu
HS_dev_log
HSRyuuu
전체
오늘
어제
  • 전체 글 보기 (233)
    • Java (25)
    • Spring (26)
    • JPA & QueryDSL (13)
    • Database (17)
    • 자료구조 & 알고리즘 (30)
    • DevOps (10)
    • [ Computer Science ] (47)
      • Web & Network (14)
      • 프로그래밍 이론 (11)
      • 운영체제 (3)
      • 데이터베이스 이론 (5)
      • Linux 리눅스 (7)
    • [ Frontend ] (17)
      • Vue.js & Nuxt.js (9)
      • JSP_Thymeleaf (7)
    • [ 기타 ] (48)
      • 오픈소스 라이브러리 (5)
      • 코딩테스트 (13)
      • Trouble Shooting (7)
      • Tech Interview (6)
      • Book Review (9)
      • 끄적끄적... (6)
      • 개인 프로젝트 (2)

블로그 메뉴

  • 홈
  • 태그
  • github

공지사항

  • GitHub
  • 공부한 내용을 정리하고 기록하는 블로그 입니다.

인기 글

태그

  • 개발자
  • 자료구조
  • Nuxt3
  • JPA
  • cleancode
  • TechInterview
  • 기술면접
  • SpringBoot
  • web
  • 백엔드
  • mybatis
  • 리눅스
  • 트랜잭션
  • Java
  • 제로베이스
  • Spring
  • 백준
  • 백엔드스쿨
  • MySQL
  • HTTP
  • springsecurity
  • Linux
  • 클린코드
  • 백엔드기술면접
  • 백엔드공부
  • Database
  • Redis
  • SQL
  • Redisson
  • vue3

최근 댓글

최근 글

hELLO · Designed By 정상우.
HSRyuuu
[백준/JAVA] 5430번 AC / 데크, 자료구조
상단으로

티스토리툴바

개인정보

  • 티스토리 홈
  • 포럼
  • 로그인

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.