Python/알고리즘 문제 풀이

[코테] 문자열 다루기 기본

마이구미+ 2023. 6. 14. 09:21

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

<로직 고민>

  • 문제를 보자마자 try-except 구문을 써서 int형으로 변환이 되면 그대로 True, except문으로 넘어가면 answer에 False가 들어가게 하면 되겠다고 생각했다
def solution(s):
    answer = True
    try:
        int(s)
    except:
        answer = False
    return answer
  • 테스트가 30개 있는데 4개에서 실패가 떴다
  • 실패할 이유가 없는 것 같은데....싶어서 문제를 다시 뚫어지게 쳐다봤다
  • 문자열 s의 길이가 4 또는 6인 입력값이 들어오는 게 아니라 4 또는 6인지를 판별해야 하는 거였다,,ㅋㅋㅋ
  • if문으로 문자열 s의 길이를 제한해 주니 문제가 풀렸다
  • 너무 빨리 풀어서 다른 풀이법을 또 생각해봐야 할 것 같은 느낌이 든다
  • 흠 더 효율적으로 풀려면 어떻게 해야 하는 것일까...
  • 이보다 간결하고 명확할 수는 없을 것 같다 무려 11점을 얻었다!
  • answer = False가 2개 있어서 하나로 합치는 풀이를 생각해 내고 싶기는 한데....프로젝트에 집중해야 하니..!!!
  • 오늘 풀이는 아래 풀이로 만족하고 다른 사람 풀이를 봐야겠다

<완성된 코드>

def solution(s):
    answer = True
    if len(s) == 4 or len(s) == 6:
        try:
            int(s)
        except:
            answer = False
    else:
        answer = False
    return answer

<다른 사람 풀이>

- 천재풀이1

def solution(s):
    return s.isdigit() and len(s) in [4,6]
  • 아 isdigit() 사용법 까먹고 isdigit(s) 이렇게 하고 왜 런타임에러 뜨지....하고 있었네...ㅎㅎ
  • 그나저나 len(s) in [4,6]이 대박이네...난 왜 이런 생각을 못 하고 단순하게 저렇게 쓸까....휴

  • isdigit() 제대로 썼다면 두 번째 풀이로 내놓았을 풀이,,ㅎㅎ
def solution(s):
    if (len(s) == 4 or len(s) == 6) and s.isdigit():
        return True
    else:
        return False

- 천재풀이2

def solution(s):
    try:
        int(s)
    except:
        return False
    return len(s) == 4 or len(s) == 6
  • 와 if문 안 쓰고 저렇게 리턴해도 되는구나...
  • 알고 있었는데 몰랐다....