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 문으로 답변을 도출한다.
제출결과

연습문제 #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)
제출결과

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])
제출결과

연습문제 #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))
제출결과

바보같이 테스트용으로 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()))
제출결과

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()))
제출결과

어이없게도 합격..
연습문제 #5
문제
사용자가 입력한 문장에서 공백을 이용해 단어들을 구분하고, 중복된 단어없이 단어를 콤마(,)로 구분해 사전순으로 출력하는 프로그램을 작성하십시오.
입력
산 하늘 강 바다 하늘 강 들
출력
강,들,바다,산,하늘
Sol
다음의 과정을 거치면 될 것 같다.
- input_str로 입력받은 텍스트를 저장한다.
- split(" ")으로 리스트화하기
- set()으로 중복 제거하기
- list()로 변환하기
- sorted()로 오름차순 정렬
- 항목과 ','로 저장하는 반복문
- slicing으로 불필요 ',' 제거
- 출력
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])
제출결과

연습문제 #7
문제
다음 결과와 같이 문자열을 입력하면 짝수 인덱스를 가진 문자들을 출력하는 프로그램을 작성하십시오.
입력
H1e2l3l4o5w6o7r8l9d
출력
Helloworld
Sol
input_str = input()
for i in range(0, len(input_str), 2):
print(input_str[i], end="")
제출결과
