티스토리 뷰
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;
}
'알고리즘 > 프로그래머스 문제풀이' 카테고리의 다른 글
프로그래머스 NodeJS Level 1 : 실패율 (0) | 2022.03.16 |
---|---|
프로그래머스 NodeJS Level 2 : 멀쩡한 사각형 (0) | 2022.03.03 |
프로그래머스 NodeJS Level 1 : 신고 결과 받기 (0) | 2022.03.03 |
프로그래머스 NodeJS Level 2 : 멀쩡한 사각형 (0) | 2021.10.28 |
프로그래머스 NodeJS Level 1 : 로또의 최고 순위와 최저 순위 (0) | 2021.09.11 |
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- import/order
- jest
- nextjs
- 북클럽
- env
- 스토리 북
- createPortal
- nodejs
- TopLayer
- WSL2
- electron
- NextRequest
- Storybook
- NextApiRequest
- 윤성우 열혈C프로그래밍
- 노마드코더
- 우아한테크코스
- 위코드
- 노개북
- javascript
- 아차산
- 초보
- 프론트앤드
- React
- 프리온보딩
- error
- CLASS
- 원티드
- C언어
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
글 보관함