[프로그래머스 1단계] 알고리즘 8. 문자열 다루기 기본
문제 출처는 프로그래머스 알고리즘 연습 에서 볼 수 있습니다!(https://programmers.co.kr/learn/challenges)
알고리즘 8. 문자열 다루기 기본
alpha_string46함수는 문자열 s를 매개변수로 입력받습니다.s의 길이가 4혹은 6이고, 숫자로만 구성되있는지 확인해주는 함수를 완성하세요.예를들어 s가 a234
이면 False를 리턴하고 1234
라면 True를 리턴하면 됩니다.
풀이:
이 문제의 핵심은 두가지다. 문자열의 길이가 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개로 작성할 수 있다.
아직 문제의 의도는 정확히 파악하지만 더 깔끔한 코드로 바꾸는 일이 쉽지 않다. 실제로 위 코드들은 다른 사람들의 풀이를 참고하여 다시 만든 코드들이다. 어떤 사람은 정규표현식 한 줄로 문제를 푼 사람도 존재하더라. 아직 모자란 느낌이 많이 든다. ㅠㅠ