JSITCLUB

파이썬 - 프로그래머스 - 문자열 다루기 기본 본문

파이썬/문제풀이

파이썬 - 프로그래머스 - 문자열 다루기 기본

jsitclub 2020. 7. 6. 18:39

프로그래머스 level 1

문제 설명

문자열 s의 길이가 4 혹은 6이고, 숫자로만 구성돼있는지 확인해주는 함수, solution을 완성하세요. 예를 들어 s가 a234이면 False를 리턴하고 1234라면 True를 리턴하면 됩니다.

제한 사항

  • s는 길이 1 이상, 길이 8 이하인 문자열입니다.

입출력 예

 

s return
"a234" false
"1234" true

 

 

 

코딩테스트 연습 - 문자열 다루기 기본

문자열 s의 길이가 4 혹은 6이고, 숫자로만 구성돼있는지 확인해주는 함수, solution을 완성하세요. 예를 들어 s가 a234이면 False를 리턴하고 1234라면 True를 리턴하면 됩니다. 제한 사항 s는 길이 1 이��

programmers.co.kr

풀이 및 코드

문제 요약

길이가 4 혹은 6이고 숫자로만 구성되어 있으면 True

 

문제 해설

이 문제는 세가지 조건만 잘 확인하면 풀리는 문제입니다. 각각 "길이가 4인가?" , "길이가 6인가?", " 모두 숫자인가?"입니다.하지만, 여기서 놓치지 말아야 할 중요한 사항이 있습니다. 바로 조건들이 어떻게 연결되어 있는지입니다. 

문제 요약을 다시 보겠습니다.

"길이가 4 혹은6이고 숫자로만 구성되어 있으면 True"

이 문장을 조금 더 명확히 풀어쓰면 다음과 같습니다.

="s의 길이가 4 이거나 6이다 그리고 s가 숫자로만 구성되어 있다면 True이다"

="s의 길이가 4 이거나 s의 길이가 6이다. 그리고 s가 숫자로만 구성되어 있다면 True이다"

="s의 길이가 4이다. 또는 s의 길이가 6이다. 그리고 s가 숫자로만 구성되어 있다면 True이다"

이 문장을 코드처럼 틀을 변형하면 다음과 같습니다.

if (s의 길이==4) or (s의 길이 == 6) and (s==숫자):

이제 문제의 큰 틀은 해결되었고, 두 가지만 알면 되겠네요. 문자의 길이를 아는 방법과 숫자로만 되어있는지 아는 방법.

먼저 문자열의 길이를 아는 방법은 파이썬에서는 len() 함수를 사용합니다. 그리고 문자열의 메서드 중 숫자로만 되어 있는지 확인하는 메서드인 isdecimal() 함수를 사용하면 됩니다. 이와 같이 함수가 하나씩 나올 때 기억해 놓으세요. 적어도 '길이를 구하는 함수', '숫자인지 확인하는 함수'가 있다는 정도만이라도 기억해야 합니다. 그래야 나중에 함수 이름이 기억이 안 나면 검색이라도 해볼 수 있겠죠. 아예 있는지도 기억을 못 하면... 쩝...

 

그런데 여기서 문제가 있어요. and와 or에서 우선순위가 있습니다. and가 먼저죠.

그래서 길이 6인지 와 숫자인지 가 먼저 and 연산되고 그 결과와 길이가 4 인지가 or 연산돼요. 그러면 결과가 생각대로 나오지 않죠.

하지만 그런 건 외우지 마세요! 그냥 순서에 맞게 괄호를 사용하세요.

 위의 내용을 

if ((s의 길이==4) or (s의 길이 == 6)) and (s==숫자): 

와 같이 바꾸면 간단히 해결됩니다. 

 

결과코드

 

def solution(s):
    
    if (len(s)==4 or len(s)==6) and s.isdecimal()==True:
        return True
    else:
        return False

그런데 if 문을 가만히 보면

(len(s)==4 or len(s)==6) and s.isdecimal()==True라는 조건이 True면 return 값이 True

(len(s)==4 or len(s)==6) and s.isdecimal()==True라는 조건이 False면 return 값이 False 네요

그 말은 결국 

(len(s)==4 or len(s)==6) and s.isdecimal()==True) 이 return 값이 네요.

def solution(s):
    
    return (len(s)==4 or len(s)==6) and s.isdecimal()==True

하지만 첫 번째 코드가 익숙해진 후에 조금씩 연습해보세요.

 

주의!!

가끔 '길이가 4 또는 6이고...'라고 해서 "(len(s)==4 or 6) and..."라고 쓰는 분들이 있는데, 전혀 다른 결과가 나오니 조심해야 합니다.

우리는 흔히 0은 False 1은 True라고 생각하고 있습니다. 파이썬에서는 각 자료형의 기본값(정수:0, 실수:0.0, 문자열:'' 또는"" , 리스트:[] ...)들이 False, 나머지 값은 True값을 갖습니다.

때문에 (len(s)==4 or 6) 은 항상 True값이 나옵니다. ( bool의 or연산 부분을 참조하세요 https://jsitclub.tistory.com/16?category=862969#or ) 반드시 주의하세요.

 

Comments