알고리즘 문제

조회수 1679회

몇시간동안 끙끙싸매고 아무리 논리를 다시 살펴보고 코드를 다시살펴보고 다시 짜도 제 논리와 코드로는 틀리지 않았는데. 해당 사이트에서 채점 버튼을 누르면 꼭 몇개씩 실패가 뜹니다. 문제는, 알파벳 소문자로된 스트링을 받아들여서, 해당 스트링에서 이웃한 알파벳이 있으면 그 알파벳끼리 계속 지워서 결국에는 모든 알파벳을 지울 수 있으면 1을 아니면 0을 반환하는 문제입니다. 몇시간동안 계속 유심히 살펴보았지만 무엇이 잘못인지 도저히 모르겠습니다 ㅠ_ㅜ.. 헬프미!!

이미지

저는 이런식의 논리를 가지고 풀었습니다. 이미지 소스코드는 다음과 같습니다.

//여기에 코드를 입력하세요
def delString(s,i=0):
    while(True):
        try:
            if s[i] == s[i+1]:
                #처음에 동일한 경우
                if i==0:
                    s = s[2:]
                    s = delString(s)
                    break
                #마지막에 동일한 경우
                elif i== len(s)-2:
                    s = s[:-2]
                    s = delString(s,i-2)
                    break
                #중간에 동일한 경우
                else:
                    s = s[:i] + s[i+2:]
                    s = delString(s,i-1)
                    break
        except:
            break
        i +=1
    return s

1 답변

  • 정규식을 이용하면 좀 더 편리하게 작성할 수 있습니다.

    import re
    
    def solution(line):
        if line == '':    # 공백이면 성공
            return 1
        else:    
            if re.search(r'(\w)\1', line):        # 문자쌍이 존재하는가?
                return solution(re.sub(r'(\w)\1','', line))     # 존재하면 제거하고 반복
            else:                                 # 미존재시 0 리턴
                return 0
    
    • 해당 사이트에서 돌려본 결과 35점이 나오네요.. 실패도 여러개 뜨고 ㅠㅠ.. dbwodlf3 2017.5.7 11:52
    • 그리고 정규식 쓰면 안그래도 파이썬인데 또 오토마타에서 돌아가기 때문에 오버헤드가 발생하지 않나요? dbwodlf3 2017.5.7 11:53
    • 이곳은 대행사이트는 아니라서 점수까지 신경은 못쓰겠네요. 다만 질문에 대해 참고 및 답변이 되면 좋겠네요. 파이썬의 동적타입부터가 오버헤드에요. 파이썬을 사용한다는 것 자체가 성능보단 생산성이 중요한 환경에서 사용하겠다는 것인데 정규식을 오버헤드라고 해버리면 파이썬을 사용하지 말아야죠. 정영훈 2017.5.7 12:54
    • 사실 물어본게, 정확성 검증에서 실패라고 뜨는 문제들이 있어서 내가 사용한 논리와 코드가 잘못되었나 싶어서 올린거에요 ㅠㅠ. 그렇지만. 답변 해 주셔서 감사합니다. 정규식 참고할게요. dbwodlf3 2017.5.7 13:25
    • sys.setrecursionlimit() 같은걸 추가해주면 되지 않을까요 김도헌 2017.5.15 12:04

답변을 하려면 로그인이 필요합니다.

프로그래머스 커뮤니티는 개발자들을 위한 Q&A 서비스입니다. 로그인해야 답변을 작성하실 수 있습니다.

(ಠ_ಠ)
(ಠ‿ಠ)