문제
https://school.programmers.co.kr/learn/courses/30/lessons/72410
풀이
https://github.com/nowChae/algorithm/blob/master/%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%A8%B8%EC%8A%A4/1/72410.%E2%80%85%EC%8B%A0%EA%B7%9C%E2%80%85%EC%95%84%EC%9D%B4%EB%94%94%E2%80%85%EC%B6%94%EC%B2%9C/%EC%8B%A0%EA%B7%9C%E2%80%85%EC%95%84%EC%9D%B4%EB%94%94%E2%80%85%EC%B6%94%EC%B2%9C.py
주어진 문자열에 대하여 순서대로 작업을 처리하는 구현 문제였다. 정해진 스텝별로 하는 동작이 정해져 있었기에 각 스텝 별 함수를 구현해주었다.
letter 함수에서는 . , -, _ , 숫자, 영어 소문자가 아닌 경우엔 넘어가도록 하기 위해서 아스키코드를 사용하였는데 이때 ord() 메소드를 이용해 구현해주었다. ord()를 사용하지 않고 코드를 작성하는 법을 다른 사람들의 코드를 알게 되면서 코딩테스트를 위해 자주 사용되는 라이브러리나 메소드를 정리해두고 익숙해져야겠다는 생각이 들었다.
또한 정규식을 통해 푼 풀이를 보았는데, 문자열에 대해 규칙을 찾아 변환하는 문제였으므로 이렇게 긴 코드를 단 몇 줄로 표현하는 것을 보고 정규식에 대해서도 알아보면 좋을 것 같다는 생각을 했다.
def letter(word):
result = ''
for w in word:
o = ord(w)
if o == 45 or o == 46 or o == 95:
result += w
elif 48 <= o and o <= 57:
result += w
elif 97 <= o and o <= 122:
result += w
return result
def countDot(word):
result = ''
for w in word:
if w == '.':
if len(result) == 0:
result += w
continue
elif result[-1] == '.':
continue
result += w
return result
def firstLastDot(word):
while word[0] == '.' or word[-1] == '.':
if len(word) == 1:
word = ''
break
if word[0] == '.':
word = word[1:]
if word[-1] == '.':
word = word[0:len(word)-1]
return ''.join(word)
def emptyString(word):
if len(word) == 0:
word = "a"
return word
def lengthLonger(word):
if len(word) >= 16:
word = word[0:15]
if word[-1] == '.':
word = word[0:14]
return word
def lengthShorter(word):
last = word[-1]
while len(word) <= 2:
word += last
return word
def solution(new_id):
#1단계
new_id = new_id.lower()
#2단계
new_id = letter(new_id)
#3단계
new_id = countDot(new_id)
#4단계
new_id = firstLastDot(new_id)
#5단계
new_id = emptyString(new_id)
#6단계
new_id = lengthLonger(new_id)
#7단계
new_id = lengthShorter(new_id)
#print(new_id)
answer = new_id
return answer
letter!~