프로그래머스 스킬업으로 level 1 문제를 풀게 되었어요. 총 두 문제가 나왔는데 0점을 받았답니다. 그래서 연습하기로 가서 다시 풀었는데요. 제가 처음으로 코딩 테스트 문제를 풀어보는 거라 어떻게 제출해야하는지 몰랐습니다.
아래 문자를 보면 문자열 s를 입력 받아야 하는 건 줄 알고, s=input()
을 넣었는데 이 부분은 필요 없고 오히려 test 해야 할 값을 직접 print()
를 통해 실행 시켜주어야 했습니다.
이게 아니라면 댓글 남겨주세요. input으로 입력값을 받으니 EOF error가 떠서 빼야한다고 생각했거든요.
문자열 s의 길이가 4 혹은 6이고, 숫자로만 구성돼있는지 확인해주는 함수, solution을 완성하세요. 예를 들어 s가 "a234"이면 False를 리턴하고 "1234"라면 True를 리턴하면 됩니다.
정답만 보고 싶다면 제일 아래로 내려가 주세요.🚀🚀🚀
이 문제를 풀 때 생각했던 아이디어
💡 조건1: 문자열 s의 길이가 4 or 6 이어야 함
💡 조건2: 문자열 s가 숫자인지 확인해주는 것
저는 조건 1을 충족 시키기 위해 solution
함수 안에 len(s) == 4 or len(s) == 6
을 if문으로 넣어줘야겠다고 떠올렸습니다. 그럼 조건1은 해결이 되었습니다.
조건2는 어떻게 해결 시켜줘야 할까? 생각했습니다. input으로 입력 받는 값은 숫자를 입력해도 무조건 str 형태이기 때문인데요.
그렇다면 s를 int로 변환 시켜주고 type으로 확인할 수 없을까? type으로 했다가 그럴면 class <'int'> 이런... 하지만 그렇게 쓰면 바보라는 걸 저도 알았습니다.
그때 떠오른 것이 try-catch문이었습니다. 왜냐하면 int로 변환시켜주면 정수만 있다면 변환이 될 것이고, 문자열이 섞여 있으면(ex.'a234') ValueError가 뜰 테니까요.
def solution(s):
if len(s) == 4 or len(s) == 6:
try:
int(s)
return True
except:
return False
else:
return True
print(solution('a234'))
print(solution('1234'))
이 코드였습니다.
하지만 정답률에서는
62.5%라는 낮은 정답률을 보여줬습니다.😂 다른 test용 예에서는 오답이 났기 때문인데요.
그래서 구글링을 통해 알아낸 다른 방법이 isdigit()
이었습니다. 이 함수는 digit 형식인지 확인해주는 파이선 내장 함수였으며, 문자열인지 확인해주는 isalpha()
가 있었습니다.
이 두 개를 알았으면 그냥 이걸로 풀었겠는데 말이죠.
def solution(s):
if len(s) == 4 or len(s) == 6:
if s.isdigit() == True:
return True
else:
return False
else:
return False
print(solution('a234'))
print(solution('1234'))
해당 코드는 정답률 100%를 보여주는 코드였답니다.
def alpha_string46(s):
return s.isdigit() and len(s) in (4,6)
👏
이걸 두 줄로 할 수 있다니 놀랍네요.
isdigit을 통해 숫자인지 확인해주고 len(s)의 길이가 (4, 6)에 포함되는지 확인해주는 코드입니다.
그리고 제가 썼던 try, except문도 누군가 써주었는데요.
def alpha_string46(s):
try:
int(s)
except:
return False
return len(s) == 4 or len(s) == 6
제가 쓴 코드의 차이점은 if문으로 확인했던 문자열의 길이를 여기선 return을 사용해서 더 간편해졌는데요.
🥺 전 솔직히 return에 저렇게 넣어도 된다는 걸... 몰랐습니다. 위의 두 코드는 return에 조건을 넣어 True, False를 출력할 수 있도록 해준다는 점에서 코드가 간결해지는 걸 볼 수 있었네요.
def solution(s):
if len(s) == 4 or len(s) == 6:
if s.isdigit() == True:
return True
else:
return False
else:
return False
print(solution('a234'))
print(solution('1234'))