13.7 심사문제 : 온라인 할인 쿠폰 시스템 만들기
문제 : 표준 입력으로 가격(정수)과 쿠폰 이름이 각 줄에 입력됩니다. Cash3000 쿠폰은 3,000원, Cash5000 쿠폰은 5,000원을 할인합니다. 쿠폰에 따라 할인된 가격을 출력하는 프로그램을 만드세요(input에서 안내 문자열은 출력하지 않아야 합니다).
정답 :
money = int(input())
coupon = input()
if coupon == 'Cash3000':
money -= 3000
if coupon == 'Cash5000':
money -= 5000
print(money)
14.7 심사문제 : 합격 여부 판단하기
문제 : 표준 입력으로 국어, 영어, 수학, 과학 점수가 입력됩니다. 여기서 네 과목의 평균 점수가 80점 이상일 때 합격이라고 정했습니다. 평균 점수에 따라 '합격', '불합격'을 출력하는 프로그램을 만드세요(input에서 안내 문자열은 출력하지 않아야 합니다). 단, 점수는 0점부터 100점까지만 입력받을 수 있으며 범위를 벗어났다면 '잘못된 점수'를 출력하고 합격, 불합격 여부는 출력하지 않아야 합니다.
정답 :
korean, english, math, science = map(int,input().split())
if 0<=korean<=100 and 0<=english<=100 and 0<=math<=100 and 0<=science<=100:
if (korean+english+math+science)/4 >= 80:
print('합격')
else:
print('불합격')
else:
print('잘못된 점수')
15.4 심사문제 : 교통카드 시스템 만들기
문제 : 표준 입력으로 나이(만 나이)가 입력됩니다(입력 값은 7 이상 입력됨). 교통카드 시스템에서 시내버스 요금은 다음과 같으며 각 나이에 맞게 요금을 차감한 뒤 잔액이 출력되게 만드세요(if, elif 사용). 현재 교통카드에는 9,000원이 들어있습니다.
정답 :
if 7<=age<=12:
balance -= 650
elif 13<=age<=18:
balance -= 1050
elif age>=19:
balance -= 1250
16.6 심사문제 : 구구단 출력하기
문제 : 표준 입력으로 정수가 입력됩니다. 입력된 정수의 구구단을 출력하는 프로그램을 만드세요(input에서 안내 문자열은 출력하지 않아야 합니다). 출력 형식은 숫자 * 숫자 = 숫자처럼 만들고 숫자와 *, = 사이는 공백을 한 칸 띄웁니다.
정답 :
dan = int(input())
for i in range(1,10):
print(dan,'*',i,'=',dan*i,sep=' ')
17.6 심사문제 : 교통카드 잔액 출력하기
문제 : 표준 입력으로 금액(정수)이 입력됩니다. 1회당 요금은 1,350원이고, 교통카드를 사용했을 때마다의 잔액을 각 줄에 출력하는 프로그램을 만드세요(input에서 안내 문자열은 출력하지 않아야 합니다). 단, 최초 금액은 출력하지 않아야 합니다. 그리고 잔액은 음수가 될 수 없으며 잔액이 부족하면 출력을 끝냅니다.
정답 :
money = int(input())
while money>=1350:
money -= 1350
print(money)
18.6 심사문제 : 두 수 사이의 숫자 중 3으로 끝나지 않는 숫자 출력하기
문제 : 표준 입력으로 정수 두 개가 입력됩니다(첫 번째 입력 값의 범위는 1~200, 두 번째 입력 값의 범위는 10~200이며 첫 번째 입력 값은 두 번째 입력 값보다 항상 작습니다). 다음 소스 코드를 완성하여 첫 번째 정수와 두 번째 정수 사이의 숫자 중 3으로 끝나지 않는 숫자가 출력되게 만드세요. 정답에 코드를 작성할 때는 while True:에 맞춰서 들여쓰기를 해주세요.
정답 :
start, stop = map(int, input().split())
i = start
while True:
if i % 10 == 3:
i += 1
continue
if i > stop:
break
print(i, end=' ')
i += 1
19.6 심사문제 : 산 모양으로 별 출력하기
문제 : 표준 입력으로 삼각형의 높이가 입력됩니다. 입력된 높이만큼 산 모양으로 별을 출력하는 프로그램을 만드세요(input에서 안내 문자열은 출력하지 않아야 합니다). 이때 출력 결과는 예제와 정확히 일치해야 합니다. 모양이 같더라도 공백이나 빈 줄이 더 들어가면 틀린 것으로 처리됩니다.
정답 :
height=int(input())
for i in range(height):
for j in range(height*2-1):
if j-i<=height-1<=j+i:
print('*',end='')
else:
print(' ',end='')
print()
20.8 심사문제 : 5와 7의 배수, 공배수 처리하기
문제 : 표준 입력으로 정수 두 개가 입력됩니다(첫 번째 입력 값의 범위는 1~1000, 두 번째 입력 값의 범위는 10~1000이며 첫 번째 입력 값은 두 번째 입력 값보다 항상 작습니다). 첫 번째 정수부터 두 번째 정수까지 숫자를 출력하면서 5의 배수일 때는 'Fizz', 7의 배수일 때는 'Buzz', 5와 7의 공배수일 때는 'FizzBuzz'를 출력하는 프로그램을 만드세요(input에서 안내 문자열은 출력하지 않아야 합니다).
정답 :
start,stop = map(int,input().split())
for i in range(start, stop+1):
if i%5==0 and i%7==0:
print('FizzBuzz')
elif i%5==0:
print('Fizz')
elif i%7==0:
print('Buzz')
else:
print(i)
21.6 심사문제 : 별 그리기
문제 : 표준 입력으로 꼭지점 개수(정수)와 선의 길이(정수)가 입력됩니다(꼭지점 개수의 입력 범위는 5~10, 선의 길이 입력 범위는 50~150입니다). 다음 소스 코드를 완성하여 꼭지점 개수와 선의 길이에 맞는 별이 그려지게 만드세요. 별을 그릴 때는 현재 위치부터 오른쪽으로 이동해서 시작해야 하며 시계 방향으로 그려야 합니다.
정답 :
import turtle as t
n,line = map(int, input().split())
t.shape('turtle')
t.speed('fastest')
for i in range(n):
t.forward(line)
t.right(360/n*2)
t.forward(line)
t.left(360/n)
22.10 심사문제 : 2의 거듭제곱 리스트 생성하기
문제 : 표준 입력으로 정수 두 개가 입력됩니다(첫 번째 입력 값의 범위는 1~20, 두 번째 입력 값의 범위는 10~30이며 첫 번째 입력 값은 두 번째 입력 값보다 항상 작습니다). 첫 번째 정수부터 두 번째 정수까지를 지수로 하는 2의 거듭제곱 리스트를 출력하는 프로그램을 만드세요(input에서 안내 문자열은 출력하지 않아야 합니다). 단, 리스트의 두 번째 요소와 뒤에서 두 번째 요소는 삭제한 뒤 출력하세요. 출력 결과는 리스트 형태라야 합니다.
정답 :
a,b = map(int,input().split())
test = [2**i for i in range(a,b+1)]
test.pop(1)
test.pop(len(test)-2)
print(test)
23.7 심사문제 : 지뢰찾기
문제 : 표준 입력으로 2차원 리스트의 가로(col)와 세로(row)가 입력되고 그 다음 줄부터 리스트의 요소로 들어갈 문자가 입력됩니다. 이때 2차원 리스트 안에서 *는 지뢰이고 .은 지뢰가 아닙니다. 지뢰가 아닌 요소에는 인접한 지뢰의 개수를 출력하는 프로그램을 만드세요(input에서 안내 문자열은 출력하지 않아야 합니다).
정답 :
col, row = map(int, input().split())
matrix = []
for i in range(row):
matrix.append(list(input()))
for i in range(col):
for j in range(row):
if matrix[i][j]=='*':
print('*',end='')
else:
count=0
for k in range(i-1,i+2):
for l in range(j-1,j+2):
if k<0 or k>=row or l<0 or l>=row:
continue
elif matrix[k][l]=='*':
count+=1
print(count,end='')
print()
먼저 for문을 돌려 matrix에 append로 추가해 2차원 리스트를 만든다.
2차원 리스트가 준비되면 for range로 col, row만큼 반복하면서 요소가 *이면 *을 그대로 출력하고 *가 아닐 경우는 따로 생각한다. *가 아닐 경우, 요소 주변 8개를 탐색하면서 *이면 count를 1개씩 증가시키면 된다.
단, 주변 요소를 탐색할 때 리스트의 범위를 벗어나면(y < 0 or x < 0 or y >= row or x >= col) 요소에는 접근하지 않고 건너뛰어야 한다.
24.5 심사문제 : 특정 단어 개수 세기
문제 : 표준 입력으로 문자열이 입력됩니다. 입력된 문자열에서 'the'의 개수를 출력하는 프로그램을 만드세요(input에서 안내 문자열은 출력하지 않아야 합니다). 단, 모든 문자가 소문자인 'the'만 찾으면 되며 'them', 'there', 'their' 등은 포함하지 않아야 합니다.
정답 :
string = input().split()
count = 0
for i in string:
i = i.strip(',.')
if i =='the':
count+=1
print(count)
'the'의 개수만 구하려면 먼저 paragraph에 split을 사용하여 공백을 기준으로 분리한 뒤 리스트로 만들어준다.
그다음에 for 반복문으로 리스트를 반복하면서 문자열이 'the'인지 판단한다.
그런데 단순히 문자열이 'the'인지만 판단하면 'the,' 또는 'the.'처럼 ,(콤마)나 .(점)이 붙어있는 문자열은 'the'와 다르다고 나온다. 그래서 strip에 ',.'을 지정해서 콤마와 점을 삭제한 뒤 'the'와 비교해야 한다.
24.6 심사문제 : 높은 가격순으로 출력하기
문제 : 표준 입력으로 물품 가격 여러 개가 문자열 한 줄로 입력되고, 각 가격은 ;(세미콜론)으로 구분되어 있습니다. 입력된 가격을 높은 가격순으로 출력하는 프로그램을 만드세요(input에서 안내 문자열은 출력하지 않아야 합니다). 이때 가격은 길이를 9로 만든 뒤 오른쪽으로 정렬하고 천단위로 ,(콤마)를 넣으세요.
정답 :
price = list(map(int,input().split(';')))
price.sort(reverse=True)
for i in (price):
print('%9s' % format(i, ','))
해설 : 우선 입력받은 가격들을 오름차순으로 정렬하기 위해 map에 int를 사용하여 정수로 변환해준다. 그리고 sort 메서드를 사용하기 위해 다시한번 map 객체를 리스트로 변환한 뒤 변수에 저장한다.
그리고 sort 메서드를 이용해 오름차순으로 정렬한 뒤, for 반복문을 이용해 가격을 길이 9로 만든 뒤 오른쪽 청렬하고 천단위로, ,(콤마)를 넣으므로써 하나씩 출력해주면 된다.
25.8 심사문제 : 딕셔너리에서 특정 값 삭제하기
문제 : 표준 입력으로 문자열 여러 개와 숫자 여러 개가 두 줄로 입력되고, 첫 번째 줄은 키, 두 번째 줄은 값으로 하여 딕셔너리를 생성합니다. 다음 코드를 완성하여 딕셔너리에서 키가 'delta'인 키-값 쌍과 값이 30인 키-값 쌍을 삭제하도록 만드세요.
정답 :
keys = input().split()
values = map(int, input().split())
x = dict(zip(keys, values))
x.pop('delta')
x = {key: value for key, value in x.items() if value != 30}
print(x)
먼저 키가 'delta'인 키-값 쌍을 삭제하라고 했으므로 x.pop('delta')로 키-값 쌍을 삭제한다. 그리고 값이 30인 키-값 쌍을 삭제할 때는 딕셔너리 표현식을 사용하여 값이 30인 키-값 쌍만 제외한 뒤 딕셔너리를 다시 만들면 된다.
26.9 심사문제 : 공약수 구하기
문제 : 표준 입력으로 양의 정수 두 개가 입력됩니다. 다음 소스 코드를 완성하여 두 숫자의 공약수를 세트 형태로 구하도록 만드세요. 단, 최종 결과는 공약수의 합으로 판단합니다.
정답 :
a,b = map(int,input().split())
a = {i for i in range(1,a+1) if a % i == 0}
b = {j for j in range(1,b+1) if b % j == 0}
divisor = a & b
result = 0
if type(divisor) == set:
result = sum(divisor)
print(result)
공약수는 약수가 들어있는 두 세트의 교집합을 구해야 하는데, 여기서는 divisor = a & b로 교집합을 구하고 있으므로 약수 세트를 만들어서 변수 a와 b만 저장해주면 된다.
'Programming Languages > Python' 카테고리의 다른 글
[P4C] 파이썬 코딩 도장 : 문제 풀이3 (0) | 2021.01.28 |
---|---|
[P4C] 파이썬 코딩 도장 : UNIT 25 ~ UNIT 28 (0) | 2021.01.27 |
[P4C] 파이썬 코딩 도장 : UNIT 22 ~ UNIT 24 (0) | 2021.01.26 |
[P4C] 파이썬 코딩 도장 : UNIT 19 ~ UNIT 21 (0) | 2021.01.25 |
[P4C] 파이썬 코딩 도장 : UNIT 16 ~ UNIT 18 (0) | 2021.01.23 |