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
반응형
'프론트엔드✏️ > 코드캠프' 카테고리의 다른 글
Javascript vs TypeScript (0) | 2022.06.30 |
---|---|
220629 프론트엔드 부트캠프 50일차 : 배포를 해보자!(3) - 동적 배포 실습 (0) | 2022.06.30 |
220628 프론트엔드 부트캠프 49일차 : 배포를 해보자!(2) - 정적 배포 실습, refreshToken 권한분기, reactNative (0) | 2022.06.29 |
알고리즘 - [1차] 다트 게임 (0) | 2022.06.28 |
HTTP와 HTTPS (0) | 2022.06.28 |