문제
두 자연수 A와 B가 주어진다. 이때, A+B, A-B, A*B, A/B(몫), A%B(나머지)를 출력하는 프로그램을 작성하시오.
코드
A,B = input().split()
print(int(A)+int(B))
print(int(A)-int(B))
print(int(A)*int(B))
print(int(A)//int(B)) # 몫
print(int(A)%int(B)) # 나머지
문제
준하는 놀람을 ??!로 표현한다. 준하가 가입하려고 하는 사이트에 이미 존재하는 아이디가 주어졌을 때, 놀람을 표현하는 프로그램을 작성하시오.
코드
id = input()
print(id+'??!')
문제
체스는 총 16개의 피스를 사용하며, 킹 1개, 퀸 1개, 룩 2개, 비숍 2개, 나이트 2개, 폰 8개로 구성되어 있다.
동혁이가 발견한 흰색 피스의 개수가 주어졌을 때, 몇 개를 더하거나 빼야 올바른 세트가 되는지 구하는 프로그램을 작성하시오.
코드
chess = [1,1,2,2,2,8]
number = list(map(int, input().split()))
for i in range(len(chess)):
print(chess[i]-number[i],end=' ')
문제
새싹을 출력하시오
코드
print(" ,r\'\"7\nr`-_ ,\' ,/\n \\. \". L_r\'\n `~\\/\n |\n |\n")
풀이
이스케이프 문자
(1) \t : tap
(2) \n : 줄을 띄움
특수기호 출력
(1) \ : 역슬래쉬 출력
(2) \' : 작은따옴표(') 출력
(3) \" : 큰따옴표(") 출력
문제
연도가 주어졌을 때, 윤년이면 1, 아니면 0을 출력하는 프로그램을 작성하시오.
윤년은 연도가 4의 배수이면서, 100의 배수가 아닐 때 또는 400의 배수일 때이다.
코드
A = int(input())
if (A%4)==0 and (A%100)!=0: #!=대신 and not 사용 가능
print(1)
elif (A%400)==0:
print(1)
else:
print(0)
문제
바로 "45분 일찍 알람 설정하기"이다. 원래 설정되어 있는 알람을 45분 앞서는 시간으로 바꾸는 것이다.
현재 상근이가 설정한 알람 시각이 주어졌을 때, 창영이의 방법을 사용한다면, 이를 언제로 고쳐야 하는지 구하는 프로그램을 작성하시오.
코드
hour,min = map(int,input().split())
if min>=45: # 시간이 바뀌지 않는 경우
if hour!=0:
print(hour, min-45)
else:
print(hour, min-45)
else: # 시간이 바뀌는 경우
if hour!=0:
print(hour-1, min+15)
else:
print(23, min+15)
문제
훈제오리구이를 시작하는 시각과 오븐구이를 하는 데 필요한 시간이 분단위로 주어졌을 때, 오븐구이가 끝나는 시각을 계산하는 프로그램을 작성하시오.
코드
hour, min = map(int, input().split())
time = int(input())
cook = (60*hour + min + time) % 1440 #24시간 넘지 않기 위해서
c_hour = cook//60 # 몫 = 시
c_min = cook%60 # 나머지 = 분
print(c_hour, c_min)
문제
영수증에 적힌,
- 구매한 각 물건의 가격과 개수
- 구매한 물건들의 총 금액
을 보고, 구매한 물건의 가격과 개수로 계산한 총 금액이 영수증에 적힌 총 금액과 일치하는지 검사해보자
코드
X = int(input()) # N = 영수증에 적힌 총 금액
N = int(input()) # X = 영수증에 적힌 물건 종류의 수
A=0
for i in range(N):
a,b = map(int, input().split()) # a = 물건의 가격, b = 물건의 개수
A += a*b
if(X==A):
print("Yes")
else:
print("No")
문제
입출력 방식이 느리면 여러 줄을 입력받거나 출력할 때 시간초과가 날 수 있다는 점이다.
Python을 사용하고 있다면, input 대신 sys.stdin.readline을 사용할 수 있다. 단, 이때는 맨 끝의 개행문자까지 같이 입력받기 때문에 문자열을 저장하고 싶을 경우 .rstrip()을 추가로 해 주는 것이 좋다.
코드
import sys
N = int(input())
# (1)
for i in range(N):
x, y = map(int, sys.stdin.readline().split())
print(x+y)
# (2)
a = [map(int, sys.stdin.readline().split()) for i in range(N)]
for x, y in a:
print(x+y)
문제
첫째 줄에는 별 1개, 둘째 줄에는 별 2개, N번째 줄에는 별 N개를 찍는 문제
코드
N = int(input())
for i in range(1,N+1):
print(' '*(N-i)+"*"*i) # ,로 연결하면 공백 생겨 + 사용해 문자열로 만듦
문제
0보다 크거나 같고, 99보다 작거나 같은 정수가 주어질 때 다음과 같은 연산을 할 수 있다. 먼저 주어진 수가 10보다 작다면 앞에 0을 붙여 두 자리 수로 만들고, 각 자리의 숫자를 더한다. 그 다음, 주어진 수의 가장 오른쪽 자리 수와 앞에서 구한 합의 가장 오른쪽 자리 수를 이어 붙이면 새로운 수를 만들 수 있다. 다음 예를 보자.
26부터 시작한다. 2+6 = 8이다. 새로운 수는 68이다. 6+8 = 14이다. 새로운 수는 84이다. 8+4 = 12이다. 새로운 수는 42이다. 4+2 = 6이다. 새로운 수는 26이다.
위의 예는 4번만에 원래 수로 돌아올 수 있다. 따라서 26의 사이클의 길이는 4이다.
N이 주어졌을 때, N의 사이클의 길이를 구하는 프로그램을 작성하시오.
코드
N = int(input())
len=0
new = -1
while N!=new:
if(new == -1):
new = N
new = new%10*10+(new//10+new%10)%10 # 조건 만족하는 식 생성
len += 1 # 길이 측정
print(len)
문제
총 N개의 정수가 주어졌을 때, 정수 v가 몇 개인지 구하는 프로그램을 작성하시오.
코드
N = int(input()) # 정수의 개수
arr = list(map(int, input().split()[:N])) # 배열
sel = int(input()) # 찾을 정수
# count함수 사용
print(arr.count(sel))
문제
정수 N개로 이루어진 수열 A와 정수 X가 주어진다. 이때, A에서 X보다 작은 수를 모두 출력하는 프로그램을 작성하시오.
코드
N, X = map(int, input().split())
arr = list(map(int, input().split()))
for i in range(N):
if arr[i] < X:
print(arr[i], end=" ")
문제
9개의 서로 다른 자연수가 주어질 때, 이들 중 최댓값을 찾고 그 최댓값이 몇 번째 수인지를 구하는 프로그램을 작성하시오.
예를 들어, 서로 다른 9개의 자연수
3, 29, 38, 12, 57, 74, 40, 85, 61
이 주어지면, 이들 중 최댓값은 85이고, 이 값은 8번째 수이다.
코드
arr = []
for _ in range(9):
arr.append(int(input()))
print(max(arr))
print(arr.index(max(arr))+1)
문제
X대학 M교수님은 프로그래밍 수업을 맡고 있다. 교실엔 학생이 30명이 있는데, 학생 명부엔 각 학생별로 1번부터 30번까지 출석번호가 붙어 있다.
교수님이 내준 특별과제를 28명이 제출했는데, 그 중에서 제출 안 한 학생 2명의 출석번호를 구하는 프로그램을 작성하시오
코드
arr = [i for i in range(1, 31)]
for _ in range(28):
N = int(input())
arr.remove(N)
print(min(arr))
print(max(arr))
문제
두 자연수 A와 B가 있을 때, A%B는 A를 B로 나눈 나머지 이다. 예를 들어, 7, 14, 27, 38을 3으로 나눈 나머지는 1, 2, 0, 2이다.
수 10개를 입력받은 뒤, 이를 42로 나눈 나머지를 구한다. 그 다음 서로 다른 값이 몇 개 있는지 출력하는 프로그램을 작성하시오.
코드
arr = []
for _ in range(10):
arr.append(int(input()) % 42)
setarr = set(arr)
print(len(setarr))
문제
"OOXXOXXOOO"와 같은 OX퀴즈의 결과가 있다. O는 문제를 맞은 것이고, X는 문제를 틀린 것이다. 문제를 맞은 경우 그 문제의 점수는 그 문제까지 연속된 O의 개수가 된다. 예를 들어, 10번 문제의 점수는 3이 된다.
"OOXXOXXOOO"의 점수는 1+2+0+0+1+0+0+1+2+3 = 10점이다.
OX퀴즈의 결과가 주어졌을 때, 점수를 구하는 프로그램을 작성하시오.
코드
N = int(input())
for _ in range(N):
arr = list(input())
score = 0
sum_score = 0
for i in arr:
if i == 'O':
score += 1
sum_score += score
else:
score = 0
print(sum_score)
문제
각 케이스마다 한 줄씩 평균을 넘는 학생들의 비율을 반올림하여 소수점 셋째 자리까지 출력한다.
코드
C = int(input())
for _ in range(C):
arr = list(map(int, input().split()))
avg = sum(arr[1:]) / arr[0]
N = 0
for i in arr[1:]:
if i > avg:
N += 1
answer = (N / arr[0]) * 100
print('%.3f'% answer + '%')
문제
정수 n개가 주어졌을 때, n개의 합을 구하는 함수를 작성하시오.
코드
def solve (a):
return sum(a)
문제
셀프 넘버는 1949년 인도 수학자 D.R. Kaprekar가 이름 붙였다. 양의 정수 n에 대해서 d(n)을 n과 n의 각 자리수를 더하는 함수라고 정의하자. 예를 들어, d(75) = 75+7+5 = 87이다.
양의 정수 n이 주어졌을 때, 이 수를 시작해서 n, d(n), d(d(n)), d(d(d(n))), ...과 같은 무한 수열을 만들 수 있다.
예를 들어, 33으로 시작한다면 다음 수는 33 + 3 + 3 = 39이고, 그 다음 수는 39 + 3 + 9 = 51, 다음 수는 51 + 5 + 1 = 57이다. 이런식으로 다음과 같은 수열을 만들 수 있다.
33, 39, 51, 57, 69, 84, 96, 111, 114, 120, 123, 129, 141, ...
n을 d(n)의 생성자라고 한다. 위의 수열에서 33은 39의 생성자이고, 39는 51의 생성자, 51은 57의 생성자이다. 생성자가 한 개보다 많은 경우도 있다. 예를 들어, 101은 생성자가 2개(91과 100) 있다.
생성자가 없는 숫자를 셀프 넘버라고 한다. 100보다 작은 셀프 넘버는 총 13개가 있다. 1, 3, 5, 7, 9, 20, 31, 42, 53, 64, 75, 86, 97
10000보다 작거나 같은 셀프 넘버를 한 줄에 하나씩 출력하는 프로그램을 작성하시오.
코드
number = list(range(1, 10001))
create = []
for num in number:
for n in str(num):
num += int(n)
if num <= 10000:
create.append(num)
for create in set(create):
number.remove(create)
for i in number:
print(i)
풀이