logo
Search검색어를 포함하는 게시물들이 최신순으로 표시됩니다.
    Table of Contents
    [Python] 문자열 - 연습문제 1~7

    이미지 보기

    [Python] 문자열 - 연습문제 1~7

    • 22.01.08 작성

    • 22.01.08 수정

    • 읽는 데 7

    TOC

    참고 강의

    SWEA 파이썬 프로그래밍 기초(2) 파이썬의 기본 응용 #37 ~ #42


    연습문제 #1

    문제

    다음의 결과와 같이 회문(앞뒤 어느 쪽에서도 같은 단어, 말) 여부를 판단하는 코드를 작성하십시오.

    입력

    madam
    

    출력

    madam
    입력하신 단어는 회문(Palindrome)입니다.
    

    Sol

    input_str = input()
    print(input_str)
    
    input_str_r = ""
    for i in input_str:
        input_str_r = i + input_str_r
    
    if input_str == input_str_r:
        print("입력하신 단어는 회문(Palindrome)입니다.")
    else:
        print("입력하신 단어는 회문(Palindrome)이 아닙니다.")
    

    해당 문자열을 처음부터 끝까지 한 글자씩 빼내어 앞에다가 붙이는 반복문을 만들면, 해당 단어를 뒤집은 꼴이 된다. 이때 이 두 문자열이 같다면 회문이기 때문에 if ~ else 문으로 답변을 도출한다.

    제출결과

    image

    연습문제 #2

    문제

    다음과 같이 문장을 구성하는 단어를 역순으로 출력하는 프로그램을 작성하십시오.

    입력

    A better tomorrow
    

    출력

    tomorrow better A
    

    Sol A

    연습문제 1과 같은 방식이지만, 한 개의 문자였던 것과 달리 단어를 기준으로 역순으로 바꿔야한다. 때문에 단어를 구분하는 공백 " "으로 split하여 문자열을 리스트로 만든 뒤, 이를 연습문제 1처럼 풀면 될 것 같다.

    input_str = input()
    input_list = input_str.split(" ")
    
    input_str_r = ""
    
    for i in input_list:
        input_str_r = "{0} {1}".format(i, input_str_r)
    
    print(input_str_r)
    

    제출결과

    image

    Sol B

    곰곰히 생각해보니 리스트를 뒤집어 공백과 함께 출력하면 더 편할 것 같아 reversed() 함수를 사용하는 방식으로 코드를 짜봤다.

    input_str = input()
    input_list = input_str.split(" ")
    
    input_list_r = reversed(input_list)
    input_str_r = ""
    
    for i in input_list_r:
        input_str_r += i + " "
    
    print(input_str_r[:-1])
    

    제출결과

    image

    연습문제 #3

    문제

    다음의 결과와 같이 임의의 URL 주소를 입력받아 protocol, host, 나머지(path, querystring, ...)로 구분하는 프로그램을 작성하십시오.

    입력

    http://www.example.com/test?p=1&q=2
    

    출력

    protocol: http
    host: www.example.com
    others: test?p=1&q=2
    

    Sol

    # 입력값 저장
    input_str = input()
    
    # protocol 분리
    input_list_1 = input_str.split("://")
    protocol = input_list_1[0]
    
    # host 분리
    input_list_2 = input_list_1[1].split("/")
    host = input_list_2[0]
    
    # others 리스트에서 host 항목 제거
    input_list_2.remove(host)
    
    # others 리스트 문자열 합치기
    others = ""
    for i in input_list_2:
        others += i + "/"
    
    # 맨 마지막 "/"" 제거
    others = others[:-1]
    
    # 출력
    print("protocol: {0}".format(protocol))
    print("host: {0}".format(host))
    print("others: {0}".format(others))
    

    제출결과

    image

    바보같이 테스트용으로 print한 코드들까지 제출해서 3번이나 fail을 받았다. 이전에도 같은 실수를 자주 했는데 더 확인하는 습관을 들여야겠다.


    연습문제 #4

    문제

    다음의 결과와 같이 여러 문장을 입력받아 대문자로 변환해 출력하는 프로그램을 작성합니다. 아무 것도 입력하지 않고 엔터만 입력하면 입력이 종료됩니다.

    입력

    Hello World
    hello world
    Python
    

    출력

    >> HELLO WORLD
    >> HELLO WORLD
    >> PYTHON
    

    Sol - 보류

    input이 몇 개나 들어올지 모르기 때문에 리스트에 담아 반복문과 조건문으로 input을 조절해보려 한다.

    input_list = []
    
    input_complete = 0
    
    while True:
        a = input()
    
        if a == "":
            break
        else:
            input_list.append(a)
    
    for i in input_list:
        print("{0}".format(i.upper()))
    

    제출결과

    image

    2번 제출했는데 자꾸 런타임 에러가 발생했다. 뭔가 문제인지 모르겠다.

    Sol - 대체

    어렵지 않은 문제임에도 합격률이 30% 내외이고, 인터넷도 참고해보니 문제 자체에 출제 오류가 있는 것 같았다. 반복문이 계속 돌아가는 모양. 그래서 input이 3개인만큼 3번만 돌고 반복문을 멈추는 방식으로 코드를 정정해서 제출하기로 했다.

    input_list = []
    cnt = 0
    
    while True:
        a = input()
    
        if a == "":
            break
        else:
            input_list.append(a)
    
    
        # 문제 오류로 강제 종료
        cnt += 1
        if cnt == 3:
            break
    
    for i in input_list:
        print(">> {0}".format(i.upper()))
    

    제출결과

    image

    어이없게도 합격..


    연습문제 #5

    문제

    사용자가 입력한 문장에서 공백을 이용해 단어들을 구분하고, 중복된 단어없이 단어를 콤마(,)로 구분해 사전순으로 출력하는 프로그램을 작성하십시오.

    입력

    산 하늘 강 바다 하늘 강 들
    

    출력

    강,들,바다,산,하늘
    

    Sol

    다음의 과정을 거치면 될 것 같다.

    1. input_str로 입력받은 텍스트를 저장한다.
    2. split(" ")으로 리스트화하기
    3. set()으로 중복 제거하기
    4. list()로 변환하기
    5. sorted()로 오름차순 정렬
    6. 항목과 ','로 저장하는 반복문
    7. slicing으로 불필요 ',' 제거
    8. 출력
    input_str = input()
    
    # split(" ")으로 리스트화
    # set()으로 중복 제거
    # list()로 변환
    # sorted()로 오름차순 정렬
    input_list = sorted(list(set(input_str.split(" "))))
    
    result_str = ""
    for i in input_list:
        result_str += i + ","
    
    print(result_str[:-1])
    

    제출결과

    image

    연습문제 #7

    문제

    다음 결과와 같이 문자열을 입력하면 짝수 인덱스를 가진 문자들을 출력하는 프로그램을 작성하십시오.

    입력

    H1e2l3l4o5w6o7r8l9d
    

    출력

    Helloworld
    

    Sol

    input_str = input()
    
    for i in range(0, len(input_str), 2):
        print(input_str[i], end="")
    

    제출결과

    image
    profile

    FE Developer 박승훈

    노력하는 자는 즐기는 자를 이길 수 없다