-
[프로그래머스 1단계] 알고리즘 8. 문자열 다루기 기본24년 11월 이전/레거시-알고리즘(3) 2018. 3. 12. 23:09반응형
문제 출처는 프로그래머스 알고리즘 연습 에서 볼 수 있습니다!(https://programmers.co.kr/learn/challenges)
알고리즘 8. 문자열 다루기 기본
alpha_string46함수는 문자열 s를 매개변수로 입력받습니다.s의 길이가 4혹은 6이고, 숫자로만 구성되있는지 확인해주는 함수를 완성하세요.예를들어 s가
a234
이면 False를 리턴하고1234
라면 True를 리턴하면 됩니다.def alpha_string46(s):#함수를 완성하세요return True# 아래는 테스트로 출력해 보기 위한 코드입니다.print( alpha_string46("a234") )print( alpha_string46("1234") )풀이:
이 문제의 핵심은 두가지다. 문자열의 길이가 4 또는 6인지 여부 다른 하나는 모두 숫자로 이루어져있는지 여부이다. 길이가 4 또는 6인지 알아보려면 제일 먼저 떠로으는건 조건식일 것이다. 이렇게 말이다.
len(s) == 4 or len(s) == 6
물론 코드가 말하는 바가 정확해서 좋지만 뭔가 다른 조건들을 더 붙이기엔 코드가 복잡해질 것 같다. 이를 하나의 코드로 묶는 것이 바로 이 코드이다.
len(s) in [4, 6]
즉 길이 len(s)가 폐구간 [4, 6](4 <=x <=6)에 원소로 존재하는지 묻는 코드이므로 정확하게 동작한다.
다음은 문자열이 숫자로 이루어져있는지 여부이다. 간단하게 파이썬 문자열 string 클래스의 isdigit() 메소드를 활용하면 문자열이 숫자로 이루어져있는지 알 수 있다. 다른 방법으로는 정규표현식을 이용하는 것이다. 다음과 같이 써서 검사할 수 있다.
re.match('\d{4, 6}', s)
re.match는 첫번째 인자로 검사 기준이 되는 정규표현식을 두 번째 인자로 검사할 문자열을 받는다. 그리고 정규표현식을 해석하자면 4~6개의 숫자로 이루어진 문자열을 찾는 식이다. 따라서 함수는 다음과 같이 2개로 작성할 수 있다.
def alpha_string46(s):return s.isdigit() and len(s) in [4,6]import redef alpha_string46(s):#함수를 완성하세요p = re.match('\d{4,6}', s)return bool(p) and len(s) in [4,6]아직 문제의 의도는 정확히 파악하지만 더 깔끔한 코드로 바꾸는 일이 쉽지 않다. 실제로 위 코드들은 다른 사람들의 풀이를 참고하여 다시 만든 코드들이다. 어떤 사람은 정규표현식 한 줄로 문제를 푼 사람도 존재하더라. 아직 모자란 느낌이 많이 든다. ㅠㅠ
728x90'레거시 > 레거시-알고리즘(3)' 카테고리의 다른 글
[프로그래머스 1단계] 알고리즘 10. 정수 제곱근 판별하기 (0) 2018.03.19 [프로그래머스 1단계] 알고리즘 9. 자릿수 더하기 (0) 2018.03.15 [프로그래머스 1단계] 알고리즘 7. 문자열 내 마음대로 정렬하기 (0) 2018.03.05 [프로그래머스 1단계] 알고리즘 6. 같은 숫자는 싫어! (0) 2018.02.21 [프로그래머스 1단계] 알고리즘 5. 행렬 합 (0) 2018.02.20