코딩테스트 연습 - 문자열 다루기 기본 | 프로그래머스 스쿨 (programmers.co.kr)
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
문제
문자열 s의 길이가 4 혹은 6이고, 숫자로만 구성돼있는지 확인해주는 함수, solution을 완성하세요. 예를 들어 s가 "a234"이면 False를 리턴하고 "1234"라면 True를 리턴하면 됩니다.
제한 사항
s는 길이 1 이상, 길이 8 이하인 문자열입니다.
s는 영문 알파벳 대소문자 또는 0부터 9까지 숫자로 이루어져 있습니다.
입출력 예
s | return |
"a234" | False |
"1234" | True |
풀이
아이디어: 길이가 4 or 6인지 확인하고, 숫자인지 확인해주는 함수 사용
def solution(s):
if len(s) == 4 or len(s) == 6:
if s.isnumeric():
return True
else:
return False
else:
return False
len(s)의 길이가 4 이거나 6인지 판단하는 조건문을 처음에 걸어주었다.
(이때 처음에는 len(s) == 4 or 6 이렇게 했었는데, 이렇게 하면 len(s)==4 혹은 6 을 판단하는 조건문이 된다.
숫자 6은 항상 참이기 때문에 저 코드는 항상 참을 반환하게 된다.)
이후 isnumeric()함수로 숫자로 이루어져 있는지 판단하여 true or false를 반환하도록 만들었다.
def solution(s):
if len(s) == 4 or len(s) ==6:
try:
int(s)
return True
except:
return False
return False
이번에는 try - except 구문을 이용해봤다.
똑같이 길이에 대한 조건을 걸고 s가 int()로 반환되면 True를 안되면 False를 반환하도록 만들었다.
다른 효율적인 풀이
def alpha_string46(s):
return s.isdigit() and len(s) in [4,6]
이 문제에서는 isnumeric()이나 isdigit() 모두 사용 가능하다.
반환값이 True or False 이므로, 조건문에 넣는 대신에 저렇게 return에 넣어서 반환해도 되더라.
(이렇게는 사용이 낯선데 배워야겠다.)
len(s) in [4,6] 은 s의 길이가 4 혹은 6일때 True가 나온다.
따라서 and로 묶어 s가 숫자이면서 해당 길이를 만족할 때만 True가 나오고, 아닐때는 False를 반환하도록 한 코드이다.
def alpha_string46(s):
try:
int(s)
except:
return False
return len(s) == 4 or len(s) == 6
나와 같이 try - except 구문을 활용했지만, return에 길이 조건을 걸어준 코드이다.
int(s)가 실행되지 않는다면 except로 가서 False가 나오고
int(s)가 실행된다면, return len(s) == 4 or len(s) == 6 이 실행된다.
따라서 길이가 4 혹은 6이면 True가 나오고 아니라면 False가 출력된다.
이쯤에서 다시 보는 논리 연산자
or 연산자는 둘 중 하나라도 참이면 전체 표현식을 참으로 평가
print(4 == 4 or 4 == 6) # 출력: True
print(5 == 4 or 5 == 6) # 출력: False
print(6 == 4 or 6 == 6) # 출력: True
and 연산자는 둘 다 참일 때 전체 표현식을 참으로 평가
print(4 == 4 and 6 == 6) # 출력: True
print(4 == 4 and 5 == 6) # 출력: False
print(5 == 4 and 7 == 6) # 출력: False
다시 풀이로 돌아와서,
def alpha_string46(s):
import re
return bool(re.match("^(\d{4}|\d{6})$", s))
정규 표현식을 사용해서 푼 코드이다.
(정규 표현식의 패턴은 sql에서만 사용되는 줄 알았는데, 파이썬도 있었구나)
정규 표현식에서 ^와 $는 문자열의 처음과 끝을 의미하며, \d는 숫자를 의미한다.
{ \d 4} | { \d 6}은 숫자가 4번 혹은 6번 반복되는 것을 의미하며,
이 조건들을 matach() 함수를 이용해 찾고 최종 결과를 bool 형태인 true/false로 리턴하게 하는 코드이다.
파이썬의 정규 표현식도 시간이 날 때 공부해서 포스팅 해야겠다.
'문제풀이 > 프로그래머스' 카테고리의 다른 글
[프로그래머스 Lv.1] 명예의 전당(1) (Python) (0) | 2024.07.12 |
---|---|
[프로그래머스 Lv.1] 행렬의 덧셈 (Python) +zip()함수 (0) | 2024.07.11 |
[프로그래머스 Lv.1] 부족한 금액 계산하기 (Python) (0) | 2024.07.10 |
[프로그래머스 Lv.1] 약수의 개수와 덧셈 (Python) (0) | 2024.07.10 |
[프로그래머스 Lv.1] 내적 (Python) (0) | 2024.07.10 |