프론트엔드✏️/코드캠프
알고리즘 - 신규 아이디 추천 replace, slice, concat,
당근먹는하니
2022. 6. 29. 18:40
728x90
반응형
const yes = ["a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "l", "m", "n", "o", "p","q", "r","s","t","u","v","x","y","z","0","1","2","3","4","5","6","7","8","9","0","-","_","."];
function solution(new_id) {
var answer = '';
console.log(new_id.toLowerCase());
let id = "";
new_id = new_id.toLowerCase();
for(let i = 0; i < new_id.length; ++i) {
if(yes.includes(new_id[i])) {
id+=new_id[i]
}
}
console.log(id)
}
solution("...!@BaT#*..y.abcdefghijklm")
못 풀었다..ㅠㅠ !!!~~~ ..을 제거하는 것부터 못했다.
오늘 팀플 회의도 하고 알고리즘 테스트 있어서 시간이 나지 않기도 했다,,,
// 멘토님 풀이
const filter = 'qwertyuiopasdfghjklzxcvbnm1234567890-_.';
function solution(new_id) {
// 1단계 : 모든 소문자를 대응되는 대문자로 치환
new_id = new_id.toLowerCase();
// 2단계 : 소문자, 숫자, 빼기, 밑줄, 마침표 제외한 모든 문자를 제거
let answer = "";
for(let i =0; i< new_id.length; i++) {
if(filter.includes(new_id[i])) {
answer += new_id[i]
}
}
// 3단계 : 마침표(.)가 2번 이상 연속된다면 하나의 마침표로 치환
while(answer.includes("..")) {
answer = answer.replace("..", ".")
}
// 4단계 : 마침표(.)가 문자열 처음이나 끝에 위치한다면 제거한다.
if(answer[0]===".") {
answer = answer.substring(1);
}
function removeLastDot() {
if(answer[answer.length-1]===".") {
answer = answer.substring(0, answer.length-1);
}
}
removeLastDot();
// 5단계 : 빈 문자열일 경우, "a"를 대입한다.
if(answer.length===0){
answer = "a";
}
// 6단계 : 문자열의 길이가 16자 이상이라면, 15자까지 자른다.
// 제거한 후, 마침표가 문자열 끝에 위치한다면 제거한다.
if(answer.length>=16) {
answer = answer.substring(0, 15);
removeLastDot();
}
// 7단계 : 문자열의 길이가 2글자 이하라면, 마지막 글자를 3글자가 될 때까지 붙여준다.
if(answer.length <= 2) {
const lastStr = answer[answer.length-1]; // 담아서 이걸 붙여준다.
// 붙일 때 padEnd를 붙이면 되겠지!!!
answer = answer.padEnd(3, lastStr);
}
return answer;
}
// 메서드로 풀기!
const filter = 'qwertyuiopasdfghjklzxcvbnm1234567890-_.';
function solution(new_id) {
// 1단계 : 모든 소문자를 대응되는 대문자로 치환
new_id = new_id.toLowerCase();
// 2단계 : 소문자, 숫자, 빼기, 밑줄, 마침표 제외한 모든 문자를 제거
let answer = new_id.filter((str,i)=> {
return filter.includes(str);
});
// 3단계 : 마침표(.)가 2번 이상 연속된다면 하나의 마침표로 치환
answer = answer.filter(str => {
console.log(str, answer[i+1]) // 현재 데이터, 그 뒤에 데이터
return str !== "."||(str==="."&&answer[i+1]!=="."); // 마침표가 아닐때만 거른다.
})
// 4단계 : 마침표(.)가 문자열 처음이나 끝에 위치한다면 제거한다.
if(answer[0]===".") {
// answer.shift();
answer = answer.slice(1) // answer.shift()
}
const removeLastDot = () => {
if(answer[answer.length-1]===".") {
answer.pop();
}
}
removeLastDot();
// 5단계 : 빈 배열일 경우, "a"를 대입한다.
if(answer.length===0) {
answer.push("a");
}
// 6단계 : 문자열의 길이가 16자 이상이라면, 15자까지 자른다.
// 제거한 후, 마침표가 문자열 끝에 위치한다면 제거한다.
if(answer.length >= 16) {
answer = answer.slice(0, 15)
removeLastDot();
}
// 7단계 : 문자열의 길이가 2글자 이하라면, 마지막 글자를 3글자가 될 때까지 붙여준다.
if(answer.length<=2) {
const add = new Array(3-answer.length)
.fill(answer[answer.length-1]);
answer = [...answer, ...add];
}
return answer.join("");
}
arr = [];
arr[1] = 1;
arr[0] 은 undefined임
그래서 비었는지 확인할 때는 arr.length로 확인한다.
728x90
반응형