CodeUp 기초4-2(중첩 반복문)
1351 : 구구단 출력하기 2
시작단과 마지막 단을 입력하면
그 구간의 구구단을 출력하는 프로그램을 작성하시오.
start, end = map(int, input().split())
for dan in range(start, end+1):
for n in range(1, 10):
print("{}*{}={}".format(dan, n, dan*n))
5 6 5*1=5 5*2=10 5*3=15 5*4=20 5*5=25 5*6=30 5*7=35 5*8=40 5*9=45 6*1=6 6*2=12 6*3=18 6*4=24 6*5=30 6*6=36 6*7=42 6*8=48 6*9=54
1352 : 사각형 출력하기 1
길이 n이 입력되면 길이가 n인 사각형을 출력하시오.
단, 사각형은 * 모양으로 채운다.
n = int(input())
for h in range(n):
for w in range(n):
print('*', end='')
print()
4 **** **** **** ****
1353 : 삼각형 출력하기 1
n이 입력되면 다음과 같은 삼각형을 출력하시오.
예)
n 이 5 이면
* ** *** **** *****
n = int(input())
for i in range(1, n+1):
print('*' * i)
3 * ** ***
1354 : 삼각형 출력하기 2
길이 n이 입력되면 역삼각형을 출력한다.
예)
n이 5이면
***** **** *** ** *
n = int(input())
for i in range(n, -1, -1):
print('*' * i)
5 ***** **** *** ** *
1355 : 삼각형 출력하기 3
길이 n이 입력되면 다음과 같은 역삼각형을 출력한다.
예)
n이 5이면
***** **** *** ** *
# Sol1
n = int(input())
for i in range(n):
print(' ' * i, end='')
print('*' * (n-i))
3 *** ** *
# Sol2
n = int(input())
for i in range(1, n+1):
for j in range(1, n+1):
if (j < i):
print(' ', end='')
else:
print('*', end='')
print()
3 *** ** *
1356 : 사각형 출력하기 2
길이 n이 입력되면 다음과 같은 사각형을 출력한다.
예)
n이 5일때
***** * * * * * * *****
# Sol1
n = int(input())
for i in range(n):
if i == 0 or i == (n - 1):
print('*' * n)
else:
print('*' + ' ' * (n - 2) + '*')
3 *** * * ***
# Sol2
n = int(input())
for i in range(n):
for j in range(n):
if i == 0 or i == n - 1 or j == 0 or j == n - 1:
print('*', end='')
else:
print(' ', end='')
print()
5 ***** * * * * * * *****
1357 : 삼각형 출력하기 4
n이 입력되면 다음 삼각형을 출력하시오.
예) n = 4
* ** *** **** *** ** *
# Sol1
n = int(input())
j = 0
for i in range(n * 2 - 1):
if i <= (n * 2 - 1) // 2:
j += 1
else:
j -= 1
print('*' * j)
3 * ** *** ** *
# Sol2
n = int(input())
for i in range(1, n+1):
for j in range(1, i+1):
print('*', end='')
print()
for i in range(n-1, 0, -1):
for j in range(1, i+1):
print('*', end='')
print()
5 * ** *** **** ***** **** *** ** *
1358 : 삼각형 출력하기 5
어떤 수 n을 입력받으면 다음과 같은 삼각형을 출력한다.
여기서 입력되는 n은 반드시 홀수이다.
* *** *****
# Sol1
n = int(input())
j = (n - 1) // 2
for i in range(1, n+1, 2):
print(' ' * j + '*' * i + ' ' * j)
j -= 1
5 * *** *****
# Sol2
n = int(input())
for i in range(n//2 + 1):
for j in range(n // 2 - i):
print(' ', end='')
for j in range(i * 2 + 1):
print('*', end='')
print()
5 * *** *****
1361 : 별 계단 만들기
n이 입력되면 n층의 별 계단을 출력하시오.
예) n= 5인 경우,
** ** ** ** **
# Sol1
n = int(input())
for i in range(n):
print(' ' * i + '**')
5 ** ** ** ** **
# Sol2
n = int(input())
for i in range(1, n+1):
for j in range(i-1):
print(' ', end='')
print('**')
5 ** ** ** ** **
1365 : 사각형 출력하기 3
역시 별로 사각형을 출력하는 문제이다.
하지만 여기서는 대각선을 출력해야한다.
프로그램은 다음과 같이 진행된다.
- n이 입력된다.(3<=n<=100)
2.대각선이 포함된 n*n사각형을 출력한다.
# Sol1: 띄어쓰기 중심
n = int(input())
j = 0 # 띄어쓰기 카운팅
m = (n - 3) // 2 # 처음과 끝을 제외한 공간의 가운데 ex) n=6, m=2 / n=7, m=2
is_odd = True if n % 2 == 1 else False # n이 홀수인지?
for i in range(n): # 총 n번 반복하며
if i == 0 or i == (n - 1): # 처음과 끝이라면
print('*' * n) # 전부 채우고
else: # 사이라면
# 출력문은 홀수의 가운데일 경우를 제외하고 모두 같은 포맷팅
if is_odd: # 홀수인 경우
if (i-1) < m: # 공간의 가운데보다 작을 경우
print('*' + ' ' * j + '*' + ' ' * (n-4-j*2) + '*' + ' ' * j + '*')
j += 1
elif (i-1) == m: # 공간의 가운데일 경우
print('*' + ' ' * j + '*' + ' ' * (n-4-j*2) + ' ' * j + '*')
j -= 1
else: # 공간의 가운데보다 클 경우
print('*' + ' ' * j + '*' + ' ' * (n-4-j*2) + '*' + ' ' * j + '*')
j -= 1
else: # 짝수인 경우
if (i-1) <= m: # 공간의 가운데보다 작거나 같을 경우
print('*' + ' ' * j + '*' + ' ' * (n-4-j*2) + '*' + ' ' * j + '*')
j += 1
else: # 공간의 가운데보다 클 경우
j -= 1
print('*' + ' ' * j + '*' + ' ' * (n-4-j*2) + '*' + ' ' * j + '*')
6 ****** ** ** * ** * * ** * ** ** ******
# Sol2: '*' 중심
n = int(input())
for i in range(n):
if i == 0 or i == n-1: # 처음과 끝일 경우
print('*' * n) # 전부 채움
else: # 처음과 끝 사이일 경우
for j in range(n): # n번 만큼 반복하며 '*'을 찍을 위치일 경우를 나타내줌
# 1. 처음, 2. 좌상향 대각선, 3. 우상향 대각선, 4. 마지막
# 위와 같을 때 '*'을 찍음
if j == 0 or j == i or j == n-i-1 or j == n-1:
print('*', end='')
# 위 경우에 해당하지 않을 경우
else:
print(' ', end='') # 공간으로 채움
print() # 줄바꿈
6 ****** ** ** * ** * * ** * ** ** ******
1366 : 사각형 출력하기 4
대각선과 테두리가 그려진 사각형에 가로,세로 중심에 선을 추가하기로 했다.
n이 입력되었을때, 이러한 n*n 사각형을 출력하는 프로그램을 만들자.(단, 3<=n<=99, n은 홀수)
n = int(input())
for i in range(n):
if i == 0 or i == (n-1)//2 or i == n-1:
print('*' * n)
else:
for j in range(n):
if j == 0 or j == i or j == n-i-1 or j == n-1 or j == (n-1)//2:
print('*', end='')
else:
print(' ', end='')
print()
17 ***************** ** * ** * * * * * * * * * * * * * * * * * * * * * * * * * * *** * ***************** * *** * * * * * * * * * * * * * * * * * * * * * * * * * * ** * ** *****************
1367 : 평행사변형 출력하기 1
평행사변형의 높이 n이 주어진다.
옆 면이 대각선으로 이루어지는 평행사변형을 출력한다.
단,공백은 왼쪽 위에 있다.
n = int(input())
for i in range(1, n+1):
print(' ' * (n-i) + '*' * n)
4 **** **** **** ****
1368 : 평행사변형 출력하기 2
이번엔 공백의 방향까지 정하여 평행사변형을 만들자.
방향 정보는 다음과 같다.
L=왼쪽 아래에 공백
R=오른쪽 아래에 공백
다음 조건에 맞춰 평행사변형을 출력한다.
h, k, d = input().split()
h, k = int(h), int(k)
if d == 'L':
for i in range(h):
print(' ' * i + '*' * k)
elif d == 'R':
for i in range(h):
print(' ' * (h-i-1) + '*' * k)
5 4 L **** **** **** **** ****
1369 : 빗금 친 사각형 출력하기
별 모양 도형 출력하기에 재미를 붙인 철수는 이번에는 조금 어려운 빗금 친 사각형을 만들어 보기로 했다.
n∗n 사각형에서 k간격 마다 빗금을 친 사각형을 출력하는 프로그램을 작성하시오.
예를 들어, n=10, k=3이면,
********** ** * * * * * * * * * * ** ** * * * * * * * * * * ** ** * * * * * * * **********
윗변을 기준으로 왼쪽에서 부터 k간격마다 ↙방향으로 빗금을 그으시오.
10 3인경우,
********** | | | 이 위치들(즉, 3의 배수)
n, k = map(int, input().split())
for i in range(n):
if i == 0 or i == n-1:
print('*' * n)
else:
for j in range(n):
if j == 0 or j == n-1 or (i+j+1) % k == 0:
print('*', end='')
else:
print(' ', end='')
print()
10 3 ********** ** * * * * * * * * * * ** ** * * * * * * * * * * ** ** * * * * * * * **********
1370 : 지그재그 출력하기
높이 h와 반복휫수 r이 주어질때, 별을 다음과 같이 지그재그로 출력하자.
예) 3 2
* * * * * * * * * *
# 높이 h와 반복횟수 r을 입력
h, r = map(int, input().split())
for k in range(r): # 반복횟수 r만큼 반복
j = h - 2 # '*'이 최대 높이 후 띄어야 하는 횟수
for i in range(h*2-1): # h*2-1번 만큼 반복 여기서 i는 ' '의 횟수
if i <= h - 1: # 만약 i가 h-1보다 작거나 같다면, 즉 ' '의 횟수가 중간 지점까지라면
print(' ' * i + '*') # 다음을 출력
else: # 만약 i가 h-1보다 크다면, 즉 ' '의 횟수가 중간 지점을 지났다면
print(' ' * j + '*') # 다음을 출력하고
j -= 1 # ' '의 횟수를 줄인다
4 3 * * * * * * * * * * * * * * * * * * * * *
# 높이 h와 반복횟수 r을 입력
h, r = map(int, input().split())
for i in range(r): # 반복횟수 r번만큼 반복
# ' '의 횟수가 증가하는 코드
for j in range(h): # 높이 h만큼 반복
for k in range(j): # j만큼, 즉 ' '의 횟수를 h까지 늘리며
print(' ', end='') # ' '를 출력
print('*') # 그 후 '*'을 출력
# ' '의 횟수가 하락하는 코드
for j in range(h-2, -1, -1): # 높이 h-2부터 0까지 반복
for k in range(j): # j만큼, 즉 ' '의 횟수를 0까지 줄이며
print(' ', end='') # ' '를 출력
print('*') # 그 후 '*'을 출력
3 3 * * * * * * * * * * * * * * *
1371 : 마름모 출력하기
이번엔 마름모를 출력해보자.
n이 입력되면 대각선 2개의 길이가 2n인 마름모를 출력하시오.
n = int(input())
mid_1 = n - 1 # 가로 기준으로 처음부터 대각선의 왼쪽 절반까지의 ' '의 크기
mid_2 = 0 # 대각선의 왼쪽으로부터 떨어진 ' '의 크기
for i in range(2*n): # 대각선의 높이만큼 반복
if i < n: # i가 대각선의 절반 높이보다 작다면
print(' ' * mid_1 + '*' + ' ' * mid_2 + '*') # 다음을 출력
mid_1 -= 1 # 대각선의 ' ' 크기 줄이기
mid_2 += 2 # 그만큼 오른쪽 '*'의 위치 늘리기
else: # i가 대각선의 높이를 넘어선다면
mid_1 += 1 # 대각선의 ' ' 크기 늘리기
mid_2 -= 2 # 그만큼 오른쪽 '*'의 위치 줄이기
print(' ' * mid_1 + '*' + ' ' * mid_2 + '*') # 다음을 출력
6 ** * * * * * * * * * * * * * * * * * * * * **
# n 입력
n = int(input())
# 마름모의 위쪽 출력
for i in range(n): # n번 반복
for j in range(n-i-1): # ' '의 횟수만큼 반복 후
print(' ', end='') # ' ' 출력
print('*', end='') # 그 후 '*' 찍고
for j in range(i*2): # ' '의 횟수만큼 반복 후
print(' ', end='') # ' ' 출력
print('*') # 그 후 '*' 출력
# 마름모의 아래쪽 출력
for i in range(n, 0, -1): # n부터 1까지 반복
for j in range(n-i): # ' '의 횟수만큼 반복 후
print(' ', end='') # ' ' 출력
print('*', end='') # 그 후 '*' 출력
for j in range((i-1)*2): # ex)n=5일 때 8, 6, 4, 2, 0 순으로 반복
print(' ', end='') # ' ' 출력
print('*') # '*' 출력
6 ** * * * * * * * * * * * * * * * * * * * * **
1378 : 수열의 합
동렬이는 수학 문제를 풀다 다음과 같은 수열을 보았다.
Sn=(1)+(1+2)+(1+2+3)+(1+2+3+4)+…+(1+…+n)
임의의 정수 n이 주어질 때 이 수열의 합 Sn을 구하는 프로그램을 작성하시오.
n = int(input())
def factorial(n):
if n == 1:
return 1
elif n == 2:
return 4
return n**2 + factorial(n-2)
print(factorial(n))
6 56
이 문제는 후에 계차수열을 공부 후 공식으로 풀면 메모리와 시간 면에서 좋은 결과가 있을 것 같다.
1380 : 두 주사위의 합
주사위는 각 면에 1~6까지 적혀 있는 정육면체이다.
이런 주사위 2개를 굴려 합이 k가 나오는 경우를 조사하려고 한다.
예를 들어, 주사위 두개를 굴려 5가 나오는 경우는 1 4, 2 3, 3 2, 4 1 이다.
그리고 주사위를 하나만 굴리는 경우는 없다.
k = int(input())
for i in range(1, 7):
for j in range(1, 7):
if i + j == k:
print(i, j)
5 1 4 2 3 3 2 4 1
1382 : GuguClass
모 드라마의 한 장면에서 어떤 남자가 신의 속도로 코딩을 하면서,
“1줄로 짤 코드를 누가 10줄로 만들어 놓았어요?”
라고 말하는 장면이 프로그래머들 사이에서 주목을 받게 되었다.
다시 보기로 분석한 결과 이 남성이 작성한 코드는 구구단 중 2~5단을 예쁘게 출력하는 클래스인 것으로 확인되었다.
일명 GuguClass !!
이 남자가 작성한 코드의 실행 결과는 다음과 같다.

이 GuguClass와 동일한 결과를 나타내는 프로그램을 작성하시오.
만약 출력문으로만 작성하거나, 코드가 길면 이 남자가 가만히 있을 것 같지 않다!
for i in range(1, 10):
for dan in range(2, 6):
print('%d x %d = %2d' % (dan, i, dan*i), end='')
if dan <= 4:
print('\t', end='')
else:
print()
2 x 1 = 2 3 x 1 = 3 4 x 1 = 4 5 x 1 = 5 2 x 2 = 4 3 x 2 = 6 4 x 2 = 8 5 x 2 = 10 2 x 3 = 6 3 x 3 = 9 4 x 3 = 12 5 x 3 = 15 2 x 4 = 8 3 x 4 = 12 4 x 4 = 16 5 x 4 = 20 2 x 5 = 10 3 x 5 = 15 4 x 5 = 20 5 x 5 = 25 2 x 6 = 12 3 x 6 = 18 4 x 6 = 24 5 x 6 = 30 2 x 7 = 14 3 x 7 = 21 4 x 7 = 28 5 x 7 = 35 2 x 8 = 16 3 x 8 = 24 4 x 8 = 32 5 x 8 = 40 2 x 9 = 18 3 x 9 = 27 4 x 9 = 36 5 x 9 = 45
1677 : 종이 자르기
철수는 인쇄소에서 근무하고 있다. 인쇄소의 주된 업무는 종이에 문자와 그림을 인쇄하는 것이다. 종이의 종류는 다양하고, 고객마다 요구하는 종이의 크기도 다양하다.
인쇄소에는 종이를 크기에 따라 자동으로 잘라주는 최신식 인쇄기가 있다. 그런데 어느 날 기계가 고장이 난 상태에서 인쇄를 요구하는 고객이 찾아왔고, 마침 그 고객이 요구하는 크기의 종이도 없어 큰 종이를 수동으로 잘라야 하는 상황이 되었다.
철수는 종이를 고객이 요구하는 크기대로 잘라보려고 했으나, 절취선이 없어 쉽지 않았다.
고객이 요구하는 가로, 세로 길이가 주어지면 아주 큰 종이에 다음과 같은 절취선을 그리는 프로그램을 작성하시오.
예를 들어 12*4의 종이라면,
+----------+ | | | | +----------+
를 출력한다.
n, m = map(int, input().split())
for h in range(m):
if h == 0 or h == m-1:
print('+' + '-' * (n-2) + '+')
else:
print('|' + ' ' * (n-2) + '|')
12 4 +----------+ | | | | +----------+
댓글남기기