프로그래머스 2021 KAKAO BLIND RECRUITMENT 신규 아이디 추천 JavaScript
by 진혀크
오랜만에 PS 포스팅입니다.
요구조건을 그대로 따라하면 되는 간단한(?) 문제이지만 꽤 오래걸렸습니다. (Level1 문제이기 때문에 간단하다고 하겠습니다.)
특히 index를 통해 string에서 중간에 있는 문자열을 제거할 수 있는 메소드가 있다고 생각했는데 그런 메소드가 없어서 좀 까다로웠습니다.
코딩 테스트를 보다보면 문자열을 다루는 문제가 자주 나오는데 C++과 JavaScript 모두 문자열과 좀 친해져야겠다는 생각이 들었습니다.
문제설명
접근
- 친절하게 어떻게 하면 된다고 설명이 되어 있습니다. 말하는 대로 따라하시면 됩니다.
- 저는 단계별로 어디가 틀렸는지 쉽게 찾고 싶어서 매번 새로운 변수를 선언하여 이전 단계까지 완성된 값들을 대입해준 후 필요에 따라 확인했습니다.
코드
function solution(new_id) {
var answer = '';
// 1번 조건
new_id = new_id.toLowerCase();
// 2번 조건
let str2 = '';
for(let i = 0 ; i<new_id.length ; i++){
const ascii = new_id.charCodeAt(i);
if((ascii >= 97 && ascii <= 122) || (ascii >= 48 && ascii <= 57) || ascii === 45 || ascii === 46 || ascii === 95) str2 += new_id[i];
}
// 3번 조건
let str3 = '';
let count = 0, flag = 0;
let start = [], end = [];
for(let i = 0 ; i<str2.length ; i++){
if(str2[i] === '.'){
count++;
if (count>=2) flag = 1;
}
else {
if(count >= 2){
start.push(i - count);
end.push(i - 1);
}
count = 0;
flag = 0;
}
}
if(flag){
start.push(str2.length - count);
end.push(str2.length - 1);
}
let pointIdx = 0;
for(let i = 0 ; i<str2.length ; i++){
if(i > end[pointIdx]){
if(pointIdx < start.length - 1) pointIdx++;
}
if(i === start[pointIdx]){
str3 += '.';
}
if(i >= start[pointIdx] && i <= end[pointIdx]) continue;
str3 += str2[i];
}
// 4번 조건
let str4 = str3;
if(str4[0] === '.') str4 = str4.slice(1);
if(str4.endsWith('.')) str4 = str4.slice(0, str4.length - 1);
// 5번 조건
let str5 = str4;
if(str5 === '') str5 += 'a';
// 6번 조건
let str6 = str5;
if(str6.length >= 16) str6 = str6.slice(0, 15);
if(str6.endsWith('.')) str6 = str6.slice(0, str6.length - 1);
// 7번 조건
let str7 = str6;
if(str7.length <= 2){
const t = str7[str7.length - 1];
str7 = str7.padEnd(3, t);
}
answer = str7;
return answer;
}
Subscribe via RSS