※ 본 사진과 해당 게시글 내용의 문제 모두 프로그래머스[Programmers]사이트에 발췌해왔습니다.
문자열 s의 길이가 4 혹은 6이고, 숫자로만 구성돼있는지 확인해주는 함수, solution을 완성하세요.
예를 들어 s가 "a234"이면 False를 리턴하고 "1234"라면 True를 리턴하면 됩니다.
제한 사항
s는 길이 1 이상, 길이 8 이하인 문자열입니다.
<입출력 예>
s | return
"a234" | false
"1234" | true
참고로 이 문제는 제한 사항과 조건을 잘 이해해야한다.
길이가 4 혹은 6 이라는 조건을 꼭 명심해야한다.
우선 위에 말했던 주의사항을 몰랐을 때,
단순히 숫자로만 구성돼있는지 확인하는 함수를 만든 것이다.
일부 테스트에만 통과했던 코드지만
"try~ except~ else~" 예외처리 구문을 사용해서 혹여 까먹을까 올려본다.
( 바로 밑의 코드는 본 문제의 정답 코드가 아닙니다!!)
def solution(s):
try :
int(s)
except :
answer = False
else :
answer = True
return answer
복잡한 구조는 아니지만 예외처리구문을 사용했다는 점에 의의를 두고 싶다.
우선 문자를 int()
적용할 경우 *ValueError 에러가 발생하는 점을 예외처리구문으로 해결하는 방법이다.
말로 풀어 설명하자면
" s를 정수화( int(s)
)를 적용/시도 를 하는데
에러/예외가 발생 하면 answer을 False로 하고
예외가 발생하지 않는다 면 answer을 True하고 해라." 라고 할 수 있다.
def solution(s):
if (len(s) == 4 or len(s) == 6) and s.isdigit() :
answer = True
else :
answer = False
return answer
정작 통과한 코드는 간단했다.
우선 조건문에 두 가지 조건을 입력했는데
조건 1은 길이가 4 혹은 6일 때 ( (len(s) == 4 or len(s) == 6)
)
조건 2는 s가 숫자 값일 때 ( s.isdigit()
)
answer에 True를 부여했다.
(1)
def solution(s):
return (len(s) == 4 or len(s) == 6) and s.isdigit()
이 풀이는 내가 제출한 코드와 다른 풀이라기보단
간략하게 간소화한 코드라고 보면 된다!!
(2)
def alpha_string46(s):
return s.isdigit() and len(s) in (4, 6)
이 문제의 해결 방법엔 주로 .isdigit()
메서드가 쓰였는데
다른 해결방법이 있을지 궁금해서 더 알아보아야겠다.
뭔가 다른 방법도 있지 않을까...
어쨋든 방법은 위 코드들과 크게 다르지 않고
사소하게 다른 점이라면 len(s)
값이 (4, 6)
중에 해당되는지 확인하는 in을 사용했다.