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


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

입력

madam

출력

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

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

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

입력

A better tomorrow

출력

tomorrow better 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

곰곰히 생각해보니 리스트를 뒤집어 공백과 함께 출력하면 더 편할 것 같아 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

다음의 결과와 같이 임의의 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

# 입력값 저장
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을 받았다. 이전에도 같은 실수를 자주 했는데 더 확인하는 습관을 들여야겠다.


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

입력

Hello World
hello world
Python

출력

>> HELLO WORLD
>> HELLO WORLD
>> PYTHON

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번 제출했는데 자꾸 런타임 에러가 발생했다. 뭔가 문제인지 모르겠다.

어렵지 않은 문제임에도 합격률이 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

어이없게도 합격..


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

입력

산 하늘 강 바다 하늘 강 들

출력

강,들,바다,산,하늘

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

  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

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

입력

H1e2l3l4o5w6o7r8l9d

출력

Helloworld

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

image