프로그래머스 | level 1 | Python | 신규 아이디 추천
def solution(new_id):
new_id = new_id.lower()
new_id = validateAllLetters(new_id)
new_id = removeDubleDot(new_id)
new_id = removeDotOfFrontAndRear(new_id)
new_id = handleEmptyId(new_id)
new_id = handleLongId(new_id)
new_id = handleShortId(new_id)
return new_id
def validateAllLetters(id):
new_id = ""
for letter in id:
if letter.isalpha() or letter.isdigit() or letter in ["-", "_", "."]:
new_id += letter
return new_id
def removeDubleDot(id):
while ".." in id:
id = id.replace("..", ".")
return id
def removeDotOfFrontAndRear(id):
if id == ".":
return ""
if id[0] == ".":
id = id[1:]
if id[-1] == ".":
id = id[:-1]
return id
def handleEmptyId(id):
if id == "":
return "a"
return id
def handleLongId(id):
if len(id) >= 16:
id = id[:15]
if id[-1] == ".":
id = id[:-1]
return id
def handleShortId(id):
if len(id) <= 2:
lastLetter = id[-1]
while len(id) < 3:
id += lastLetter
return id
print(solution("...!@BaT#*..y.abcdefghijklm") == "bat.y.abcdefghi")
print(solution("z-+.^.") == "z--")
print(solution("=.=") == "aaa")
print(solution("123_.def") == "123_.def")
print(solution("abcdefghijklmn.p") == "abcdefghijklmn")
카카오 문제답게 문제가 일단 길~었다. 그 길이에 압도되면 안 된다. 많은 텍스트에 비해 문제의 난이도는 그렇게 어렵지 않다. 그냥 문제에서 시키는 대로 풀면 된다. 하지만 그 방법이 ... 위와 같이 날코딩이었다.
일단 느낌상으로 문자열을 어떤 조건에 따라 계속 수정하는 것이니 '정규표현식'을 쓰면 되지 않을까, 해서 정규표현식을 검색해서 찾아봤는데 너무 어려웠다. 하지만 level 1이니까 빨리 풀고 싶어서 결국 날코딩으로 해결해버렸다.
그렇게 풀고 다른 사람 풀이를 보니 아니나 다를까, 멋들어지게 정규표현식을 쓴 풀이 등장. 츄욱 의기소침해졌다. 나도 정규표현식 배워야 겠다고, 주르르 코딩이 아니라 호로록! 코딩을 하겠다 다짐하게 되는 문제였다.
필요했던 개념
- isalpha(), isdigit()
- replace()
- 정규표현식
'프로그래밍-학습기록 > 코딩테스트' 카테고리의 다른 글
프로그래머스 | 로또의 최고순위와 최저순위 | 자바스크립트 (0) | 2021.05.07 |
---|---|
리트코드(LeetCode): 104. Maximum Depth of Binary Tree (0) | 2021.05.06 |
레벨 1 문제에서 찾은 작은 교훈 (0) | 2021.03.01 |
프로그래머스 | level 1 | python | 3진법 뒤집기 (0) | 2021.03.01 |
프로그래머스 | 파이썬 | 삼각달팽이 (0) | 2020.12.29 |