파이썬, 자바스크립트_카카오 Lv.1 - 신규 아이디 추천

naughty _deer·2022년 4월 28일
0

코딩테스트

목록 보기
3/7

ref: https://programmers.co.kr/learn/courses/30/lessons/72410

문제 요약:

입력된 아이디와 유사하면서 규칙에 맞는 아이디를 추천해주는 프로그램을 개발
아이디의 길이는 3자 이상 15자 이하여야
아이디는 알파벳 소문자, 숫자, 빼기(-), 밑줄(_), 마침표(.) 문자만 사용할 수 있습니다.
마침표(.)는 처음과 끝에 사용할 수 없으며 또한 연속으로 사용할 수 없습니다.

제한:

new_id는 길이 1 이상 1,000 이하인 문자열

풀기 전 생각:

문자열 다루는 문제, 구현 문제
new_id의 길이가 1000 이하 밖에 되지 않기 때문에,
1초에 2000만번 연산을 하는 파이썬에겐 충분하다.

풀이 계획:

  1. 소문자로 바꾸기.
  2. tmp 선언하고 new_id 돌면서
  3. newid가 특수문자인데 빼기(-), 밑줄(), 마침표(.)가 아니라면 continue
  4. i가 .인데 tmp[-1]도 .라면 continue
  5. 이외는 전부 tmp에 넣기
    한번 끊고-
  6. tmp 양 옆에 . 없애기
  7. tmp가 비어있다면 a 넣기
  8. len(tmp) 15이하로 맞추기
    맞췄는데 마지막이 .이면 없애기
  9. len(tmp)가 2 이하라면, 3 될 때까지 복사.

풀이 코드

Python

def solution(new_id):
  new_id = new_id.lower()
  tmp = ''
  for i in new_id:
    if i.isdigit() or i.isalpha():
      tmp += i
    elif i in ['_', '-', '.']:
      if i == '.' and tmp and tmp[-1] == '.':
        continue
      tmp += i
    else:
      continue

  if tmp and tmp[0] == '.':
    tmp = tmp[1:]
  if tmp and tmp[-1] == '.':
    tmp = tmp[:-1]

  if len(tmp) == 0:
    tmp += 'a'

  if len(tmp) >=16:
    tmp = tmp[:15]
    if tmp[-1] == '.':
      tmp = tmp[:-1]

  if len(tmp) <= 2:
    while len(tmp) < 3:
      tmp += tmp[-1]
  
  return tmp

Javascript

function solution(new_id) {
  const alpha = /[a-zA-Z0-9]/;
  const useChar = ['_','-','.'];
  //1
  const lowerId = new_id.toLowerCase();
  //2,3
  let answer = '';
  for(let i=0; i<lowerId.length; i++){
    const now = lowerId[i];
    if (alpha.test(now) || useChar.includes(now)){
      if (now === '.' && answer[answer.length-1] === '.'){
        continue
      }
      answer += now;
    }
  }
  //4
  if (answer[0] === '.'){
    answer = answer.slice(1);
  }
  if (answer[answer.length-1] === '.'){
    answer = answer.slice(0,answer.length-1);
  }
  //5
  if (answer === ''){
    answer += 'a';
  };
  //6
  if (answer.length >= 16){
    answer = answer.slice(0,15);
    if (answer[answer.length-1] === '.'){
      answer = answer.slice(0,answer.length-1);
    };
  };
  //7
  if(answer.length <=2){
    while(answer.length <=2){
      answer += answer[answer.length-1];
    }
  };
  return answer
}

커뮤니티

function solution(new_id) {
  const answer = new_id
      .toLowerCase() // 1
      .replace(/[^\w-_.]/g, '') // 2
      .replace(/\.+/g, '.') // 3
      .replace(/^\.|\.$/g, '') // 4
      .replace(/^$/, 'a') // 5
      .slice(0, 15).replace(/\.$/, ''); // 6
  const len = answer.length;
  return len > 2 ? answer : answer + answer.charAt(len - 1).repeat(3 - len);
}

정규표현식의 위대함...

profile
개발자로 취업하기

0개의 댓글