알고리즘
[JS] 백준 5430번 : AC
이즈흐
2023. 6. 29. 13:39
https://www.acmicpc.net/problem/5430
5430번: AC
각 테스트 케이스에 대해서, 입력으로 주어진 정수 배열에 함수를 수행한 결과를 출력한다. 만약, 에러가 발생한 경우에는 error를 출력한다.
www.acmicpc.net
📋풀이방법
1. 주어진 문자열을 3개씩 변수로 나눈다.
2. 주어진 명령어 p에 따라 반복한다.
3. p가 R이면 뒤집어준다.
4. p가 D면 앞의 요소를 빼준다.
4-1. 만약 m=0이면 error를 체크해준다.
5. 모든 반복이 끝나면 error체크유무에 따라 error를 정답 배열에 넣거나 명령어수행된 배열을 정답 배열에 넣는다.
내 제출
const fs = require("fs");
const filePath = process.platform === "linux" ? "/dev/stdin" : "./input.txt";
let input = fs.readFileSync(filePath).toString().trim();
input=input.replace(/\r/g,"").split("\n");
let n=Number(input.shift());
let result=[];
let answer=[];
for(var i=0;i<n;i++){
result.push([input.shift(),input.shift(),input.shift()]);
}
result.forEach((x)=>{
let [p,m,arr]=x
p=p.split("");
arr=arr.slice(1,arr.length-1).split(",");
let chk=false;
let isReverse=false;
p.forEach((E)=>{
if(E=="R"){
isReverse=!isReverse;
}
else if (E=="D"){
if(m==0){
chk=true;
}
else {
m--;
if(isReverse) arr.pop();
else arr.shift();
}
}
})
if(chk){
answer.push("error");
}
else {
if(isReverse) answer.push("["+arr.reverse().join(",")+"]");
else answer.push("["+arr.join(",")+"]");
}
})
console.log(answer.join("\n"));
💢어려웠던 이유
1. 주어진 배열이 [ ~ ] 로 된 문자열이므로 [ ] 중괄호를 잘 없애줘야한다. -> slice(1,arr.length-1) 사용
2. 만약 빈 배열일 때 배열안에 빈 문자열로 인해 arr의 length가 1이 남는 상황이 생긴다.
-문제에서 주어진 배열요소의 개수 n을 이용하면된다.
3. 시간초과 이슈
-R명령어에 계속해서 arr.reverse()를 사용하면 시간초과가 나게된다.
-isReverse라는 변수를 줘서 D명령어일 때 isReverse가 true이면 pop(), false면 shift() 수행하고, 마지막에 isReverse의 유무에 따라 뒤집어준다.
4. 마지막 정답을 출력할 때 배열요소들은 "[" "]" 중괄호 문자열을 붙여서 출력해야한다.
728x90
반응형
LIST