첫번째 문제
문자열 S를 입력받은 후에, 각 문자를 R번 반복해 새 문자열 P를 만든 후 출력하는 프로그램을 작성하시오. 즉, 첫 번째 문자를 R번 반복하고, 두 번째 문자를 R번 반복하는 식으로 P를 만들면 된다. S에는 QR Code "alphanumeric" 문자만 들어있다.
예제 입력 1
2
3 ABC
5 /HTP
예제 출력 1
AAABBBCCC
/////HHHHHTTTTTPPPPP
n = int(input()) for i in range(n): el = [] a,b = map(str, input().split()) b = list(b) for j in range(len(b)): el.append(str(b[j]*int(a))) print("".join(el))
a,b를 str로 받은 후 b는 list형태로 취한 뒤 for문을 통해서 int(a)의 숫자만큼 새로운 리스트에 넣어준 후 join함수를 통해서 프린트 해 주었다.
두번째 문제
월드전자는 노트북을 제조하고 판매하는 회사이다. 노트북 판매 대수에 상관없이 매년 임대료, 재산세, 보험료, 급여 등 A만원의 고정 비용이 들며, 한 대의 노트북을 생산하는 데에는 재료비와 인건비 등 총 B만원의 가변 비용이 든다고 한다.
예를 들어 A=1,000, B=70이라고 하자. 이 경우 노트북을 한 대 생산하는 데는 총 1,070만원이 들며, 열 대 생산하는 데는 총 1,700만원이 든다.
노트북 가격이 C만원으로 책정되었다고 한다. 일반적으로 생산 대수를 늘려 가다 보면 어느 순간 총 수입(판매비용)이 총 비용(=고정비용+가변비용)보다 많아지게 된다. 최초로 총 수입이 총 비용보다 많아져 이익이 발생하는 지점을 손익분기점(BREAK-EVEN POINT)이라고 한다.
A, B, C가 주어졌을 때, 손익분기점을 구하는 프로그램을 작성하시오.
예제 입력 1
1000 70 170
예제 출력 1
11
a,b,c = map(int,input().split()) income = c-b if c <=b: print(-1) else : print(a//income +1)
만약 노트북 비용이 가변비보다 저렴하거나 비싸면 손익분기점을 넘길 수 없기에 -1을 리턴하게 했다. 그 외의 경우에는 수익으로 고정비용을 나누어서 그 몫만큼에다 1대를 더 팔아 손익분기점을 구했다.
세번째 문제
땅 위에 달팽이가 있다. 이 달팽이는 높이가 V미터인 나무 막대를 올라갈 것이다.
달팽이는 낮에 A미터 올라갈 수 있다. 하지만, 밤에 잠을 자는 동안 B미터 미끄러진다. 또, 정상에 올라간 후에는 미끄러지지 않는다.
달팽이가 나무 막대를 모두 올라가려면, 며칠이 걸리는지 구하는 프로그램을 작성하시오.
예제 입력 1
2 1 5
예제 출력 1
4
import math a,b,c = map(int, input().split()) if a ==c: print(1) else: print(math.ceil((c-a)/(a-b))+1)
정상에 올라가면 미끄러지지 않기 때문에 c-a를 가야하는 거리로, 그리고 가는 거리에서 미끄러지는 거리를 뺀 후 나눠주고 거기에다가 마지막 날에 가는 횟수 1을 더해준다.
네번째 문제
주어진 수 N개 중에서 소수가 몇 개인지 찾아서 출력하는 프로그램을 작성하시오.
a = int(input()) b = list(map(int,input().split())) r = 0 for i in b: count = 0 for j in range(2, i+1): if i%j ==0: count +=1 if count == 1: r +=1 print(r)
소수는 1과 자기자신이 약수인 수를 의미한다. 하지만 1은 소수가 아니다. 그래서 2부터 자기 자신까지 나눴을 때 나머지가 0인 횟수가 1인 경우만 결과에 1을 더해줬다.
다섯번째 문제
자연수 M과 N이 주어질 때 M이상 N이하의 자연수 중 소수인 것을 모두 골라 이들 소수의 합과 최솟값을 찾는 프로그램을 작성하시오.
예를 들어 M=60, N=100인 경우 60이상 100이하의 자연수 중 소수는 61, 67, 71, 73, 79, 83, 89, 97 총 8개가 있으므로, 이들 소수의 합은 620이고, 최솟값은 61이 된다.
a = int(input()) b = int(input()) el = [] for i in range(a, b+1): count = 0 for j in range(2,i+1): if i%j == 0: count +=1 if count == 1: el.append(i) if not el: print(-1) else: print(sum(el)) print(el[0])
네번째 문제와 마찬가지로 풀었고 el이라는 빈 리스트를 만들어 소수가 없을 시 -1을 아닐 시 소수의 합계와 가장 작은 수를 리턴 해 줬다.
여섯번째
M이상 N이하의 소수를 모두 출력하는 프로그램을 작성하시오.
예제 입력 1
3 16
예제 출력 1
3
5
7
11
13
a,b = map(int,input().split()) for i in range(a, b+1): count = 0 for j in range(2, i+1): if i%j == 0: count +=1 if count == 1: print(i)
이렇게 풀었지만 a,b의 범위가 작을때는 잘 작동하지만 그 수가 커지면 시간초과로 인해서 문제를 해결할 수 없다.
그래서 검색하던 도중 에라토스테네스의 체를 통해서 문제를 풀어야 한다는 사실을 알았다.
- 2부터 소수를 구하고자 하는 구간의 모든 수를 나열한다. 그림에서 회색 사각형으 로 두른 수들이 여기에 해당한다.
- 2는 소수이므로 오른쪽에 2를 쓴다. (빨간색)
- 자기 자신을 제외한 2의 배수를 모두 지운다.
- 남아있는 수 가운데 3은 소수이므로 오른쪽에 3을 쓴다. (초록색)
- 자기 자신을 제외한 3의 배수를 모두 지운다.
- 남아있는 수 가운데 5는 소수이므로 오른쪽에 5를 쓴다. (파란색)
- 자기 자신을 제외한 5의 배수를 모두 지운다.
- 남아있는 수 가운데 7은 소수이므로 오른쪽에 7을 쓴다. (노란색)
- 자기 자신을 제외한 7의 배수를 모두 지운다.
- 위의 과정을 반복하면 구하는 구간의 모든 소수가 남는다.
a,b=map(int,input().split()) prime=[0]*(b+1) for i in range (2, b+1): if prime[i]==0: for j in range (i+i,b+1,i): prime[j]=1 for i in range(a,b+1): if i<2: continue elif prime[i]==0: print(i)
먼저 prime을 통해서 0부터 b에 이르는 수까지 0으로 배열을 만들어준다.
그 다음 소수라면 체크하지 않고 소수라면 그 배수들을 체크해준다.
그리고 다음 반복문을 통해서 체크되지 않은 수들을 리턴해준다.
일곱번째
N개의 수가 주어졌을 때, 이를 오름차순으로 정렬하는 프로그램을 작성하시오.
예제 입력 1
5
5
2
3
4
1
예제 출력 1
1
2
3
4
5
a = int(input()) el=[] for i in range(a): el.append(int(input())) for i in sorted(el): print(i)
빈 리스트 안에 숫자를 넣어둔 후 sorted를 통해서 재정렬함