백준 5430: AC

Song-Minhyung·2022년 7월 3일
0

Problem Solving

목록 보기
15/50
post-thumbnail

문제

https://www.acmicpc.net/problem/5430
골드 5문제인데 브론즈 문제같은 문제였다.
내용은 입력으로 들어온 (R: 배열 뒤집기, D: 삭제) R혹은D를 수행하는것이다.

입력

  • 첫줄: 테스트케이스 T
  • 1 + 1n줄: R,D로 이뤄진 함수 배열 p
  • 1 + 2n줄: p에 들어있는 숫자의 개수 n
  • 1 + 3n줄: 1~100 사이의 정수
    👀 p+n은 70만을 넘지 않는다.

출력

  • p에 들어있는 연산을 수행한 결과를 출력한다.
  • 만약 D 수행도중 배열이 비었다면 error를 수행한다.

풀이방법

풀이방법은 간단했다.
1. R을 수행한다면 output *= -1을 실행한다.
2. D를 수행할 때 output이 -1이면 맨왼쪽을 제거, 1이면 맨오른쪽을 제거한다.
3. 만약 output이 -1이라면 배열을 그대로, 1이라면 배열을 뒤집어서 출력해준다.

전체코드

const stdin = (process.platform ==='linux'
? require('fs').readFileSync(0, 'utf-8')
: ``).trim().split('\n');
const input = (()=>{
    let line = 0;
    return ()=> stdin[line++];/
})();

let answer = '';
const testCase = +input();
for (let i=0; i<testCase; i++) {
    const funcs = input().split("");
    const len = +input();
    let nums = input().slice(1, -1).split(",").filter(v => v !== '').map(Number);
    // -1: 왼쪽
    // 1 : 오른쪽
    let output = -1;
    let isError = false;

    for (let i=0; i<funcs.length; i++) {
        if (funcs[i] === 'R') {
            output *= -1;
            continue;
        }else {
            if (nums.length === 0) {
                isError = true;
                break;
            }
            if (output === -1) {
                nums.shift();
            }else {
                nums.pop();
            }
        }
    }
    if (output === 1) {
        nums.reverse();
    }
    if (isError) {
        answer += `error\n`;
    }else{
        answer += `[${nums.join(",")}]\n`;
    }
}
console.log(answer);
profile
기록하는 블로그

0개의 댓글