티스토리 뷰

알고리즘/프로그래머스 문제풀이

프로그래머스 NodeJS Level 1 : 신규 아이디 추천

YG - 96년생 , 강아지 있음, 개발자 희망 2021. 9. 12. 22:57

const fs = require("fs");

const filePath = process.platform === "linux" ? "./input.txt" : "/dev/stdin"; //제 개발환경은 리눅스이기에 input.txt를 앞에 두었습니다.

// const filePath = process.platform === 'linux' ? '/dev/stdin' : './input.txt'; // 실제 백준사이트에 제출할 때는 위에 filePath를 삭제하고 이 부분을 입력하면 됩니다.

let input = fs.readFileSync(filePath).toString();

//console.log(input);

//input = input.toUpperCase()
//console.log(lottos,win_nums);

solution(input);

function solution(A) {
  A = A.toLowerCase(); // 1단계 대문자를 소문자로 만들어줍니다.
  A = A.replace(/[^a-z0-9\-\.\_]/gi, ""); // 알파벳 소문자 , 숫자 ,-._ 를 제외한 다른 문자를 없애줍니다.
  A = A.split("");
  let sameArr = [];
  let arrA = [];
  let inputArray = [];
  let answer = "";
  let pos = A.indexOf("."); // 3단계 .이 2번연속으로 나오면 중복을 없애야 합니다.
  //console.log("맨앞" + pos);
  //console.log(A);
  let i = 0;
  while (pos !== -1) {
    // pos가 -1이 아닐때 . "."이 A의 배열의 어느워치에 속해있는지 배열로 나타냅니다.
    i++;
    arrA.push(pos);
    pos = A.indexOf(".", pos + 1);
  }
  //console.log(arrA);
  for (let k = 0; k < arrA.length; k++) {
    // "."이 중복되는 경우에 어느 위치에 속해있는지 배열로 나타냅니다.
    //console.log(arrA[k]);
    if (arrA[k] - arrA[k + 1] === -1) {
      sameArr.push(arrA[k]);
    }
  }
  for (let j = 0; j < A.length; j++) {
    // 입력값의 문장 개수를 배열로 나타냅니다.
    inputArray.push(j);
  }
  //console.log(inputArray);
  //console.log(sameArr);
  inputArray = inputArray // concat을 이용해서 두 배열을 합해주고 입력값의 배열과 "."이 중복으로 되어 숫자를 나타낸 배열이 같이 포함하고 있는 순서를 제거해줍니다.
    .concat(sameArr)
    .filter((item) => !inputArray.includes(item) || !sameArr.includes(item));
  //console.log(inputArray);
  for (let m = 0; m < inputArray.length; m++) {
    answer += A[inputArray[m]]; //  3단계 ""."의 중복제거 완료
  }
  answer = answer.split("");
  //console.log(answer[0]);
  //console.log(answer[answer.length - 1]);
  if (answer[0] === ".") {
    //4단계 "."이 맨앞에 있을경우 제거합니다.
    answer.splice(0, 1);
  }
  if (answer[answer.length - 1] === ".") {
    // 4단계 "."이 맨 뒤에 있을 경우 제거합니다.
    answer.pop();
  }
  answer = answer.join("");
  if (answer === "") {
    // 5단계 빈 문자열일 경우 "a"를 넣어줍니다
    answer += "a";
  }
  answer = answer.split("");
  if (answer.length > 15) {
    // 6단계 15자리의 아이디를 넘어가면  15자리까지만 표현합니다
    answer.splice(15, 1000);
  }
  //console.log(answer[14]);
  if (answer[14] === ".") {
    // 6단계 15자리의 아이디를 만든 후 마지막이 "."이면 제거합니다.
    answer.pop();
  }
  while (answer.length < 3) {
    // 7단계 만약 입력값이 2자리 이하라면 3자리가 될 때까지 마지막 글자를 반복해서 글자수를 늘려줍니다.
    answer.push(answer[answer.length - 1]);
  }
  answer = answer.join("");
  //console.log(answer);
  return answer;
}

댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/12   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31
글 보관함