코드업 Python 기본 100
https://codeup.kr/problemsetsol.php?psid=33
문제집 / Python 기초 100제
codeup.kr
# 6083 - 빛 섞어 색 만들기
빨강(red), 초록(green), 파랑(blue) 빛을 섞어 여러 가지 다른 색 빛을 만들어 내려고 한다.
빨강(r), 초록(g), 파랑(b) 각 빛의 가짓수가 주어질 때,
주어진 rgb 빛들을 섞어 만들 수 있는 모든 경우의 조합(r g b)과 만들 수 있는 색의 가짓 수를 계산해보자.
# 내 풀이, 모범 소스
r, b, g = map(int, input().split())
for i in range(r):
for j in range(b):
for k in range(g):
print(i, j, k)
print(r*b*g)
# 6084 - 소리 파일 저장용량 계산하기
소리가 컴퓨터에 저장될 때에는 디지털 데이터화 되어 저장된다.
마이크를 통해 1초에 적게는 수십 번, 많게는 수만 번 소리의 강약을 체크하고,
한 번씩 체크할 때 마다 그 값을 정수값으로 바꾸어 저장하는 방식으로 소리를 파일로 저장할 수 있다.
값을 저장할 때에는 비트를 사용하는 정도에 따라 세세한 녹음 정도를 결정할 수 있고,
좌우(스테레오) 채널로 저장하면 2배… 5.1채널이면 6배의 저장공간이 필요하고,
녹음 시간이 길면 그 만큼 더 많은 저장공간이 필요하다.
1초 동안 마이크로 소리강약을 체크하는 횟수를 h (헤르츠, Hz 는 1초에 몇 번? 체크하는가를 의미한다.)
한 번 체크한 값을 저장할 때 사용하는 비트수를 b (2비트를 사용하면 0 또는 1 두 가지, 16비트를 사용하면 65536가지..)
좌우 등 소리를 저장할 트랙 개수인 채널 개수를 c (모노는 1개, 스테레오는 2개의 트랙으로 저장함을 의미한다.)
녹음할 시간(초) s가 주어질 때, 필요한 저장 용량을 계산하는 프로그램을 작성해보자.
실제로, 일반적인 CD 음질(44.1KHz, 16bit, 스테레오)로 1초 동안 저장하려면
44100 * 16 * 2 * 1 bit의 저장공간이 필요한데,
44100*16*2*1/8/1024/1024 로 계산하면 약 0.168 MB 정도가 필요하다.
이렇게 녹음하는 방식을 PCM(Pulse Code Modulation) 방법이라고 하는데,
압축하지 않은 순수한(raw) 소리 데이터 파일은 대표적으로 *.wav 가 있다.
# 내 풀이, 모범 소스
s, h, b, c = map(int, input().split())
storage = round(s*h*b*c/8/1024/1024, 1)
print(storage, 'MB')
# 6085 - 그림 파일 저장용량 계산하기
이미지가 컴퓨터에 저장될 때에도 디지털 데이터화 되어 저장된다.
가장 기본적인 방법으로는 그림을 구성하는 한 점(pixel, 픽셀)의 색상을 빨강(r), 초록(g), 파랑(b)의 3가지의 빛의 세기 값으로 따로 변환하여 저장하는 것인데,
예를 들어 r, g, b 각 색에 대해서 8비트(0~255, 256가지 가능)씩을 사용한다고 하면, 한 점의 색상은 3가지 r, g, b의 8비트+8비트+8비트로 총 24비트로 표현해서 총 2^24 가지의 서로 다른 빛의 색깔을 사용할 수 있는 것이다.
그렇게 저장하는 점을 모아 하나의 큰 이미지를 저장할 수 있게 되는데, 1024 * 768 사이즈에 각 점에 대해 24비트로 저장하면 그 이미지를 저장하기 위한 저장 용량을 계산할 수 있다.
이렇게 이미지의 원래(raw) 데이터를 압축하지 않고 그대로 저장하는 대표적인 이미지 파일이 *.bmp 파일이며, 비트로 그림을 구성한다고 하여 비트맵 방식 또는 래스터 방식이라고 한다.
이미지의 가로 해상도 w, 세로 해상도 h, 한 픽셀을 저장하기 위한 비트 b 가 주어질 때, 압축하지 않고 저장하기 위해 필요한 저장 용량을 계산하는 프로그램을 작성해 보자.
예를 들어 일반적인 1024 * 768 사이즈(해상도)의 각점에 대해 24비트(rgb 각각 8비트씩 3개)로 저장하려면 1024 * 768 * 24 bit의 저장공간이 필요한데, 1024*768*24/8/1024/1024 로 계산하면 약 2.25 MB 정도가 필요하다.
# 내 풀이
w, h, b= map(int, input().split())
storage = round(w*h*b/8/1024/1024, 2)
print("{0:.2f} MB".format(storage))
# 모범 소스
w,h,b = input().split()
res=int(w)*int(h)*int(b)/1024/1024/8
print('%.2f'%res,"MB")
# 6086 - 거기까지! 이제 그만~
1, 2, 3 ...을 순서대로 계속 더해 합을 만드는데, 그 합이 입력한 정수보다 작을 동안만 계속 더하는 프로그램을 작성해보자.
즉, 1부터 n까지 정수를 하나씩 더해 합을 만드는데, 어디까지 더해야 입력한 수보다 같거나 커지는지 알아보고자 하는 문제이다. 하지만, 이번에는 그 때 까지의 합을 출력해야 한다.
예를 들어, 57을 입력하면 1+2+3+...+8+9+10=55에서 그 다음 수인 11을 더해 66이 될 때, 그 값 66이 출력되어야 한다.
# 내 풀이
a = int(input())
i = 0
sum = 0
while (sum < a):
sum += i
i += 1
print(sum)
# 모범 소스
a=int(input())
s=0
c=0
while True:
s=s+c
c=c+1
if s>=a:
break
print(s)
# 6087 - 3의 배수는 통과
1부터 입력한 정수까지 1씩 증가시켜 출력하는 프로그램을 작성하되, 3의 배수인 경우는 출력하지 않도록 만들어보자.
예를 들면,
1 2 4 5 7 8 10 11 13 14 ... 와 같이 출력하는 것이다.
# 내 풀이
a = int(input())
for i in range(1,a+1):
if i%3==0:
continue
else:
print(i, end = ' ')
# 모범 소스
n=int(input())
for i in range(1, n+1) :
if i%3==0 :
continue #다음 반복 단계로 넘어간다.
print(i, end=' ') #i가 짝수가 아닐 때만 실행된다.
# 6088 - 수 나열하기
어떤 규칙에 따라 수를 순서대로 나열한 것을 수열(sequences)이라고 한다.
예를 들어 1 4 7 10 13 16 19 22 25 ... 은 1부터 시작해 이전에 만든 수에 3을 더해 다음 수를 만든 등차수열이다.
시작 값(a), 등차(d), 몇 번째인지를 나타내는 정수(n)가 입력될 때
n번째 수를 출력하는 프로그램을 만들어보자.
# 내 풀이
a, d, n = map(int, input().split())
print(a+(d*(n-1)))
# 모범 소스
a,d,n=input().split()
a=int(a)
d=int(d)
n=int(n)
s=a
for i in range(2, n+1):
s+=d
print(s)
'코딩테스트 > 코드업' 카테고리의 다른 글
(5/11) [코드업 Python 기본 100제] 기초 - 리스트 (0) | 2023.05.11 |
---|---|
(5/10) [코드업 Python 기본 100제] 기초 - 종합, 리스트 (0) | 2023.05.10 |
(5/8) [코드업 Python 기본 100제] 기초 - 종합 (0) | 2023.05.08 |
(5/4) [코드업 Python 기본 100제] 기초-선택실행구조, 반복실행구조, 종합 (0) | 2023.05.04 |
(5/3) [코드업 Python 기본 100제] 기초-비트단위논리연산, 3항연산, 선택실행구조 (2) | 2023.05.04 |