Nomad Engineer

[일일코테 Day4] 신규 아이디 추천 - 프로그래머스(레벨1) 본문

개발/코딩테스트

[일일코테 Day4] 신규 아이디 추천 - 프로그래머스(레벨1)

universehan 2021. 2. 28. 07:34

문제: 신규 아이디 추천 (레벨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

정규 표현식 101

블로그 - 정규표현식으로 5일 걸리는 작업 15분만에 끝내기

반응형