본문 바로가기

프로그래머스 코딩테스트 연습 Lv1

프로그래머스 코딩테스트 연습 - 모든문제 Lv1 [ 신규 아이디 추천 ]

[문제 설명]

- 카카오에 새로 가입하는 유저들이 아이디 규칙에 맞지 않는 아이디를 입력했을 때, 입력된 아이디와 유사하면서 규칙에 맞는 아이디를 추천해주는 프로그램을 개발.

- 아이디 길이는 3 이상 15이하임.

- 알파벳(소문자만), 숫자, '-' ,  '_' ,  '.' 만 사용할 수 있음. (이때 마침표는 처음과 끝에 사용 불가하고 연속사용 불가.)

- 총 7단계로 순차적인 처리과정이 있음.

1) new_id의 모든 대문자를 소문자로 치환.

2) 사용할수없는 문자들 제거

3) 마침표 2이상이면 하나로 치환

4) 마침표가 처음이나 끝이면 제거

5) 아이디가 비어있으면 "a" 넣음.

6) 15자 초과면 뒤에 제거함. 마침표만 남으면 마침표도 제거함

7) 2이하의 길이면 마지막글자를 반복해서 3이 되게 만듬.

- 추천 아이디 리턴

 

[제한사항]

- id길이는 1이상 1,000 이하.

- 특수문자가 한정된다함.

 

[입출력 예]

[내풀이]

- 카카오문제라 솔직히 좀 쫄았음

- 단계 나눠준거보고 왜 1단계에 있는지 알았음.. 단계대로 풀어보기로!

- replace(기존문자, 바꿀문자)

완벽하다 생각했다. 문제 내기 전까진 ㅠㅠ

흠..  런타임에러가3개고 실패가 2개다.. 왜지?

문제를 다시 읽어보니 15자 초과일때 제거하고 마지막이 마침표일 경우를 세지 않았다! 

저렇게 하고 하니까

테스트 케이스 2, 22, 23의 런타임 에러만이 남았다..ㅠㅠ 실패는 다 해결했으니.. 배열 인덱스가 문젠가?

 

1. 배열범위가 넘어가게끔 코딩한 부분이 있는가?

- 내가 쓴 배열은 문자열 슬라이싱하려고 쓴게 전분데.. 이게 넘어갔을까?ㅠㅠ 뭐 어떻게? 찾음!

  예시가 "=.=" 일때 4단계를 할때 시작이 "." 이 되므로 이걸 제거해버리니까 배열이 비어버려서 new_id[-1]이 배열범위를 벗어난다고 뜨는거임!! 그러면 여기다가 예외를 적용시켜주면 될듯.

 

[최종 코드]

 

[공부]

정규식을 이용하면 정말 간단하고 아름답게 풀 수 있다.!! 그전에 내가 짠 코드랑 비슷하게 짠것중에 더 좋은걸 배워 보도록 하자. 그냥 완전 똑같은 코든데 다른 사람 풀이가 더 이쁘다.

ㅎㅅㅅㅅㅅㅅㅅㅅㅅㅅㅅㅅㅅㅅㅅㅅㅅ

 

ㅔㅔ이제 정규식을 공부할 차례.

 

[정규 표현식]

메타 문자: 원래 그 문자가 가진 뜻이 아니라 특별한 용도로 사용되는 문자.

 

1. 문자 클래스 [] : " [ ] 사이의 문자들과 매치 되면 " 이라는 뜻. 괄호안에 하나라도 있으면 매치 아니면 매치아님.

                       '하이픈(-)' 기호를 넣으면 여기부터 여기까지 라는 뜻임. ex)a-zA-z, 0-9 카카오문제에선 a-z0-9임.

                       '^' 를 대괄호 안에 쓰면 '반대' 라는 뜻이다. ex) [^0-9] 는 숫자 제외 매치임.

2. Dot(.) : 줄바꿈 문자 \n 을 제외한 모든 문자와 매치된다는뜻. 그니까 a.b면 aspuydnsyuntub 면 매치임. a랑 b사이에 아무거나 들어가도 매치라는 얘기. 근데 a[.]b는 진짜 . 의 의미를 갖는거임 a.b여야 매치인거임.

3. * : 반복이라는 뜻. ca*t 면 caaaat cat caat ct 다 맞는거임.

4. +: 최소 1번 이상 반복 *은 0번부터임. ca+t 면 ct는 안됨. cat는됨.

5. {m,n}: m부터 n 번까지 반복. ca{2,5}t 이면 caat 부터 caaaaaat 까지만 가능.

6. ?: {0,1} 이라는 뜻임. ab?c 면 abc ac 둘다 가능임 b는 있어도 되고 없어도 된다는 뜻.

7. ^: 문자열의 맨 처음과 일치하면 매치임. ex) ^Python 이면 i love Python은 매치안대고 Python i love 는 매치됨.

8. $: 문자열의 끝과 일치하면 매치임.

9. (): 괄호로 감싸면 그루핑가능

뭐 전방탐색이나 이런저런게 또 있는거같은데.. 다음에 나오면 공부 하는거로..!