wordlength 문제가 계속 오답이 뜨는데 뭐가 문제인지 봐주시면 감사하겠습니다

  • doctidea
    doctidea

    wordlength문제를 풀기위해 파이썬 코드를 짰는데 계속 오답이 나서 왜 그런지 이유를 알고 싶습니다.

    #wordlength
    import sys
    
    
    case = int(sys.stdin.readline())
    for i in range(case):
        if case > 50:  # 케이스가 50개 초과이면 종료
            sys.exit()
        linenum = int(sys.stdin.readline())
        lines = []
        words = 0  # 단어수
        line = ''  # 글자의 수 구하는 용도
        for j in range(linenum):
            l = input()
            if len(l) < 0 or len(l) > 80:  # 입력 문자열의 길이가 0 미만 80 초과면 종료
                sys.exit()
            line += l
            lines.append(l)
        liness = line.replace(" ", "").replace("-", "")  # -, 공백 제거
        linelen = len(liness)  # 글자 수
        lin = line.replace('-', ' ').split(' ')
        truelin = []
        for k in lin:
            if not k:
                continue
            truelin.append(k)
        words = len(truelin)
        for j in range(len(lines)-1):
            if lines[j]:
                if lines[j][-1] == '-':
                    if len(lines[j]) > 1 and lines[j][-2].isalpha():
                        if lines[j+1] and lines[j+1][0].isalpha():
                            words -= 1
        print("{0:.3f}".format(round(linelen/words, 3)))
    

    제 코드는 두 부분으로 나누어집니다.
    단어의 수를 구하는 부분과 알파벳의 수를 구하는 부분.
    알파벳의 수를 구하는 것은
    1. line 문자열에 입력을 다 넣고
    2. 빈칸과 '-'를 제거한 후 그 값을 liness에 넣고
    3. liness의 길이인 linelen이 알파벳의 수가 됩니다.

    단어의 수는 lines 라는 리스트를 이용하여
    1. lines에 입력을 추가(append) 하고
    2. '-'를 빈칸으로 바꾸고, 빈칸을 기준으로 나누어 lin 리스트를 만듭니다.
    3. lin 에서 비어있지 않은 요소만 truelin 이라는 리스트에 넣습니다.
    이러면 입력에서 빈칸과 '-'를 빼고 알파벳 요소만 truelin에 들어가게 됩니다
    4. 임시적으로 truelin의 길이를 words로 하여 임시 단어 갯수를 지정합니다
    5. 그리고 문제 조건에 있는 '만약 어떤 줄의 마지막 글자가 - 이고, 그 앞 글자가
    알파벳이며, 다음 줄의 첫 글자가 알파벳이라면 두 글자는 같은 단어에 속하는 것으로 가정합니다'
    의 부분을 구현하고, if 조건을 다 통과했다면 같은 단어로 가정되기에 단어수를 1 뺍니다.
    이렇게 구한 단어수와 알파벳수를 나누고, 반올림하여 출력합니다.

    예제에 있는 입력도 다 해보고, 댓글에 있는 것도 해보고, 제가 직접 입력을 만들어서 해보고 했지만
    다 정상적으로 출력이 되는데 문제에 넣기만 하면 오답이 떠서 답답합니다.


    5년 전
4개의 댓글이 있습니다.
  • VOCList
    VOCList

    1
    4
    a
    a-
    a-
    a


    5년 전 link
  • VOCList
    VOCList

    또, round 함수를 저렇게 쓸 경우 반올림 오차가 날 수도 있습니다.

    https://docs.python.org/ko/3/library/functions.html?highlight=round#round
    의 참고 부분을 봐주세요.


    5년 전 link
  • doctidea
    doctidea

    @VOCList 아 해보니까 4 나오네요 답은 2 나와야하는거죠?


    5년 전 link
  • VOCList
    VOCList

    그럴 것 같아요.


    5년 전 link
  • 정회원 권한이 있어야 커멘트를 다실 수 있습니다. 정회원이 되시려면 온라인 저지에서 5문제 이상을 푸시고, 가입 후 7일 이상이 지나셔야 합니다. 현재 문제를 푸셨습니다.