일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 이직
- 안드로이드
- sdkmanager
- 완주하지못한선수
- 기술인터뷰
- Android
- pyenv
- 코테
- 개발영어
- 데일로코테
- CMAKE
- MediaCodec
- 데일리코테
- Python
- 알고리듬
- C++
- 커맨드라인툴
- 일일코테
- 파이썬설치
- 크레인인형뽑기
- 3진수
- 코딩테스트
- AAudio
- 프로그래머스
- Cpp
- MediaExtractor
- 알고리즘
- JavaScript
- 코딩시험
- NDK
- Today
- Total
Nomad Engineer
[일일코테 Day4] 신규 아이디 추천 - 프로그래머스(레벨1) 본문
문제: 신규 아이디 추천 (레벨1)
programmers.co.kr/learn/courses/30/lessons/72410
코딩테스트 연습 - 신규 아이디 추천
카카오에 입사한 신입 개발자 네오는 "카카오계정개발팀"에 배치되어, 카카오 서비스에 가입하는 유저들의 아이디를 생성하는 업무를 담당하게 되었습니다. "네오"에게 주어진 첫 업무는 새로
programmers.co.kr
사실 이 문제는 시간이 없어서 대충 풀고 더 이상 생각을 안했다. 블로그 글을 쓸때도 새로 더 좋은 방법을 고민해야 하기 때문에 일단 대충 적어놓고 다시 보충해야겠다.
구현
Javascript
내가 구현한 코드
function solution(new_id) {
var answer = new_id.toLowerCase()
.split('')
.filter(c => '-_.abcdefghijklmnopqrstuvwxyz1234567890'.includes(c))
.reduce((acc, c, i) => {
if (c === '.' && acc[acc.length-1] === '.' && i !== 0)
return acc;
acc.push(c);
return acc;
}, []);
if (answer[0] === '.') answer.shift();
if (answer[answer.length-1] === '.') answer.pop();
if (answer.length ===0) answer.push('a');
if (answer.length > 15) {
answer.splice(15, answer.length - 15);
if (answer[answer.length -1] === '.') answer.pop();
}
while(answer.length < 3) {
answer.push(answer[answer.length-1]);
}
return answer.join('');
}
다른 분들이 구현한 코드들

아래는 석규님의 Javascript 정규표현식을 사용한 방법.
function solution(new_id) {
var answer = (new_id||"")
.toLowerCase()
.replace(/[^a-z0-9\-_\.]/g, "")
.replace(/\.{2,}/g, ".")
.replace(/^\.|\.$/g, "")
.replace(/^$/, "a")
.slice(0, 15)
.replace(/\.$/g, "")
switch(answer.length) {
case 1:
answer = answer[0] + answer[0] + answer[0]
break
case 2:
answer = answer[0] + answer[1] + answer[1]
break
default:
//pass
}
return answer;
}
내 코드가 제일 대충 작성한 티가 난다. 이번 문제를 풀때는 어떤 함수를 사용하는게 코드를 간결하게 할지 고민자체를 하기를 포기했다. ㅋ
질문들
- 정규표현식을 쓰는것이 더 좋았나?
- ASCII 로 비교하는 방법도 있었다.
- 어떤 분은 정규표현식을 몰라서 정규표현실을 공부하느라 당일 30분을 모두 소진하고 문제는 풀지 못했다.
- 더 좋은 방법은 없었나?
토론내용
- 정규표현식을 현업에서 가장 많이 쓰니까 어찌보면 잘 알아둬야겠다.
- 정규표현식은 간결하고 편하다.
- 정규표현식은 느리다.
- 얼마나 느린지 왜 무엇때문에 느린지 알아보자
- 정규표현식을 모르면 편법으로라도 문제를 해결한뒤 고민을 하는게 좋겠다.
- 바보같아 보이는 방법이 성능면이나 가독성 면에서 더 좋을 수도 있다.
References
'개발 > 코딩테스트' 카테고리의 다른 글
[일일코테 Day6] 체육복 - 프로그래머스(레벨1) (0) | 2021.03.01 |
---|---|
[일일코테 Day7] K번째 수 (0) | 2021.03.01 |
[일일코테 Day5] 모의고사 - 프로그래머스(레벨1) (0) | 2021.02.28 |
일일코테 Day3 - 완주하지 못한 선수 - 프로그래머스 [level1] (0) | 2021.02.27 |
일일코테 Day2, 크레인 인형뽑기 게임 - 프로그래머스(레벨1) (0) | 2021.02.27 |