[알고리즘] 문자열 다루기 기본

DongGyu Jung·2021년 11월 8일
0
post-thumbnail

※ 본 사진과 해당 게시글 내용의 문제 모두 프로그래머스[Programmers]사이트에 발췌해왔습니다.

❓ 문제

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

제한 사항
s는 길이 1 이상, 길이 8 이하인 문자열입니다.

<입출력 >
s	| return
"a234"	| false
"1234"	| true

참고로 이 문제는 제한 사항과 조건을 잘 이해해야한다.
길이가 4 혹은 6 이라는 조건을 꼭 명심해야한다.

❗ 풀이

My Code

우선 위에 말했던 주의사항을 몰랐을 때,
단순히 숫자로만 구성돼있는지 확인하는 함수를 만든 것이다.
일부 테스트에만 통과했던 코드지만
"try~ except~ else~" 예외처리 구문을 사용해서 혹여 까먹을까 올려본다.
( 바로 밑의 코드는 본 문제의 정답 코드가 아닙니다!!)

def solution(s):
     try :
         int(s)
     except :
         answer = False
     else :
         answer = True
     return answer

복잡한 구조는 아니지만 예외처리구문을 사용했다는 점에 의의를 두고 싶다.
우선 문자를 int() 적용할 경우 *ValueError 에러가 발생하는 점을 예외처리구문으로 해결하는 방법이다.
말로 풀어 설명하자면
" s를 정수화( int(s) )를 적용/시도 를 하는데
에러/예외가 발생 하면 answerFalse로 하고
예외가 발생하지 않는다answerTrue하고 해라." 라고 할 수 있다.


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을 사용했다.

0개의 댓글