Dandy Now!
  • [Python] 점프 투 파이썬_종합문제_Q13_DashInsert 함수
    2021년 12월 09일 10시 41분 08초에 업로드 된 글입니다.
    작성자: DandyNow
    728x90
    반응형

    문제

    https://wikidocs.net/17114

     

    08장 종합문제

    파이썬은 웹, GUI, 네트워크, 딥러닝 등 상당히 많은 일을 할 수 있는 언어이다. 여러분이 지금까지 배운 내용을 충분히 숙지했다면 이제 이들을 향해 첫발을 내디딜 준비를 ...

    wikidocs.net

     

    점프 투 파이썬 Q13 문제의 지문은 다음과 같다.

    Q13 DashInsert 함수
    DashInsert 함수는 숫자로 구성된 문자열을 입력받은 뒤 문자열 안에서 홀수가 연속되면 두 수 사이에 - 를 추가하고, 짝수가 연속되면 * 를 추가하는 기능을 갖고 있다. DashInsert 함수를 완성하시오.

    입력 예시: 4546793
    출력 예시: 454*67-9-3

    작성 코드

    아래는 Q13 문제를 해결하기 위해 작성한 코드이다.

    def DashInsert(s): # 완성한 DashInsert함수
        # 입력된 문자열 값을 lst 리스트로 변환
        lst = []
        for i in s:
            lst.append(i)
        print(lst)
    
        # lst 리스트 값을 문제의 요구에 따라 rst 리스트에 추가
        rst = []
        for i in range(len(lst)-1): # 'list index out of range' 에러를 방지하기 위해 -1함
            if int(lst[i]) % 2 == 0 and int(lst[i+1]) % 2 == 0: # 짝수가 연속될 때
                rst.append(lst[i])
                rst.append('*')
            elif int(lst[i]) % 2 != 0 and int(lst[i+1]) % 2 != 0: # 홀수가 연속될 때
                rst.append(lst[i])
                rst.append('-')
            else:
                rst.append(lst[i]) # 홀짝 또는 짝홀 순일 때
        rst.append(lst[-1]) # 'list index out of range' 에러를 방지하기 위해 -1했던 for문에서 누락되었던 lst리스트의 마지막 값을 rst에 추가
    
        return ''.join(rst)
    
    s = '4546793' # 입력값
    print(DashInsert(s)) # DashInsert함수 호출

    문제와 해결

    처음에는 insert를 이용해 lst 리스트의 해당 주소에 * 또는 - 를 끼워 넣을 생각이었다.

    그래서 for 문을 다음과 같이 작성했었다.

    for i in range(len(lst)):
        if lst[i] != '*' and lst[i] != '-' and int(lst[i]) % 2 == 0 and int(lst[i+1]) % 2 == 0:
            lst.insert(i+1, '*')
        elif lst[i] != '*' and lst[i] != '-' and int(lst[i]) % 2 != 0 and int(lst[i+1]) % 2 != 0:
            lst.insert(i+1, '-')

     

    문제는 * 와 - 가 추가된 lst 리스트의 길이가 for 문에 반영되지 않다보니,

    다음과 같이 출력 값의 93 사이에는 - 가 적용되지 않았다.

    454*67-93

     

    이 문제를 해결하기 위해 rst 라는 새로운 리스트에 append하는 방식으로 변경했다.

    728x90
    반응형
    댓글