[Python] 프로그래머스 문자열 다루기 기본(lv.1)

미남로그·2021년 11월 13일
0

프로그래머스 스킬업으로 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'))
profile
미남이 귀엽죠

0개의 댓글