JSITCLUB
파이썬 - 프로그래머스 - 문자열 다루기 기본 본문
프로그래머스 level 1
문제 설명
문자열 s의 길이가 4 혹은 6이고, 숫자로만 구성돼있는지 확인해주는 함수, solution을 완성하세요. 예를 들어 s가 a234이면 False를 리턴하고 1234라면 True를 리턴하면 됩니다.
제한 사항
-
s는 길이 1 이상, 길이 8 이하인 문자열입니다.
입출력 예
s | return |
"a234" | false |
"1234" | true |
풀이 및 코드 |
문제 요약
길이가 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 ) 반드시 주의하세요.
'파이썬 > 문제풀이' 카테고리의 다른 글
파이썬 - 프로그래머스 - 나누어 떨어지는 숫자 배열 (0) | 2020.07.15 |
---|---|
파이썬 - 프로그래머스 - 핸드폰 번호 가리기 (0) | 2020.07.10 |
파이썬 - 프로그래머스 - 두 정수 사이의 합 (0) | 2020.06.10 |
파이썬 - 프로그래머스 - 평균 구하기 (0) | 2020.05.26 |
파이썬 - 프로그래머스 - x만큼 간격이 있는 n개의 숫자 (0) | 2020.05.20 |