문제 링크
풀이 과정
제시된 각 단계의 조건에 맞게 처리해주면 된다.
문제는 금방 파악했지만, 각 조건 처리해주는 데에서 애먹었다..
2단계는 정규식 쓰면 될 것 같지만 이에 대해 잘 모르고 타임어택(시간 재고 푸는 것) 중이라 그냥 아스키코드를 이용해서 풀어봤다.
뭔가 대체적으로 정규식을 이용해서 풀면 금방 풀릴 것 같다는 생각이 들었는데 정규식을 잘 몰라서 일단 주먹구구식 구현해봤다.
다른사람 풀이를 보면 대부분이 정규식을 이용해 깔끔하게 푼 것 같다. 이번 기회에 공부해둬야겠다!
전체 코드
function solution(new_id) {
var answer = "";
let tmpId = "";
// 1단계 : 대문자 -> 소문자 치환
new_id = new_id.toLowerCase().split("");
// 2단계 : 알파벳 소문자, 숫자, 빼기, 밑줄, 마침표 제외 모든 문자 제거
new_id.forEach((x) => {
let asciiNum = x.charCodeAt();
if (
(asciiNum >= 97 && asciiNum <= 122) ||
(asciiNum >= 48 && asciiNum <= 57) ||
asciiNum === 95 ||
asciiNum === 45 ||
asciiNum === 46
)
tmpId += x;
});
// 3단계 : 마침표 2번 이상 연속이면 하나로 치환
for (let i = 0; i < tmpId.length; i++) {
if (!(tmpId[i] === "." && tmpId[i] === tmpId[i + 1])) answer += tmpId[i];
}
// 4단계 : 마침표 처음 or 마지막이면 제거
if (answer[0] === ".") answer = answer.slice(1);
if (answer[answer.length - 1] === ".") answer = answer.slice(0, -1);
// 5단계 : id가 빈문자열이면 a 대입
if (answer.length === 0) answer += "a";
// 6단계 : id가 16자 이상이면 15자 이후 문자들 제거.
if (answer.length > 15) answer = answer.substr(0, 15);
if (answer[answer.length - 1] === ".") answer = answer.slice(0, -1); // 마지막 문자 마침표인 경우 제거
// 7단계 : id가 2자 이하라면, 마지막 문자로 길이 3 될떄까지 반복 붙임
if (answer.length <= 2) {
let lastChar = answer[answer.length - 1];
while (answer.length < 3) answer += lastChar;
}
return answer;
}
console.log(solution("...!@BaT#*..y.abcdefghijklm"));
다른 사람 코드(정규식 이용)
const solution = (new_id) => {
const id = new_id
.toLowerCase()
.replace(/[^\w\d-_.]/g, '')
.replace(/\.{2,}/g, '.')
.replace(/^\.|\.$/g, '')
.padEnd(1, 'a')
.slice(0, 15)
.replace(/^\.|\.$/g, '')
return id.padEnd(3, id[id.length-1])
}
역시 정규식을 쓰니까 깔끔.. 근데 정규식은 다른사람이 보면 뭔지 모를 것 같아서 만약 쓴다면 주석을 달면 좋을 것 같다.
padEnd 메서드는 처음봐서 찾아봤다.
str.padEnd(targetLength [, padString])
- 현재 문자열에 다른 문자열을 채워, 주어진 길이를 만족하는 새로운 문자열을 반환
- 첫번째 인자는 목표 문자열 길이, 두번째 인자는 현재 문자열에 채워넣을 다른 문자열
- 현재 문자열의 길이보다 작다면 채워넣지 않고 그대로 반환.
위 문제에서는 첫번째 인자인 목표 문자열 길이 3이 아닐 시, id의 마지막 값으로 채우고 반환하기 위함인 것 같다.
풀이 시간 : 64분(문제 파악 5분)
'코딩테스트 문제풀이 > programmers' 카테고리의 다른 글
goorm nodejs - 숫자 제거 정렬 (0) | 2024.06.15 |
---|---|
프로그래머스 node.js - 성격 유형 검사하기 (1) | 2024.06.06 |
프로그래머스 node.js - 키패드 누르기 (0) | 2024.06.05 |
프로그래머스 node.js - 실패율 (0) | 2024.05.29 |
프로그래머스 node.js - [1차] 비밀지도 (0) | 2024.05.27 |