[제로베이스_데이터 취업 스쿨 16기] 3일차(6/5)

jumee·2023년 6월 5일
0
post-thumbnail

파이썬 기초를 활용한 연습문제까지 공부한 내용을 정리했다.😎

[반복문_01]

🔻 나의 풀이

# 1부터 100까지 반복하는 과정에서
# 일의자리와 십의자리의 홀짝을 구분하는 함수를 만들어보자.

for i in range(101):
  if i < 10:
    if i % 2 != 0: 
      print('[{}]: 홀수!'.format(i))
    else:
      print('[{}]: 짝수!'.format(i))

  else:
    ten = i // 10 # 십의 자리 수
    one = i % 10 # 일의 자리 수
    if one == 0 and ten % 2 != 0:
      print('[{}] 십의자리: 홀수!!, \t 일의자리: 0'.format(i))
    elif one == 0 and ten % 2 == 0: 
      print('[{}] 십의자리: 짝수!!, \t 일의자리: 0'.format(i))
    elif one % 2 != 0 and ten % 2!= 0:
      print('[{}] 십의자리: 홀수!!, \t 일의자리: 홀수!!'.format(i))
    elif one % 2 != 0 and ten % 2 == 0:
      print('[{}] 십의자리: 짝수!!, \t 일의자리: 홀수!!'.format(i))
    elif one % 2 == 0 and ten % 2 != 0:
      print('[{}] 십의자리: 홀수!!, \t 일의자리: 짝수!!'.format(i))
    elif one % 2 == 0 and ten % 2 == 0:
      print('[{}] 십의자리: 짝수!!, \t 일의자리: 짝수!!'.format(i))

위의 풀이가 비효율적이고, 복잡하다는 것을 알게됐다. 강사님의 풀이와 비교해보자.

🔻 강사님 풀이

for i in range(101):
if i < 10:
  if i % 2 != 0: 
    print('[{}]: 홀수!'.format(i))
  else:
    print('[{}]: 짝수!'.format(i))

else:
  ten = i // 10 # 십의 자리 수
  one = i % 10 # 일의 자리 수

  result10 = '' 
  if ten % 2 == 0:
    result10 = '짝수'
  else:
    result10 = '홀수'

  result1 = '0' # 일의 자리수는 0으로 초기화해놓고
  if one != 0: # 0이 아닐 경우에만 아래를 시행
    if one % 2 == 0:
      result1 = '짝수'
    else:
      result1 = '홀수'
  
  print('[{}] 십의자리: {}!!, \t 일의자리: {}'.format(i, result10, result1))

[반복문_02]

🔻 나의 풀이

# 1부터 사용자가 입력한 정수까지의 합,홀수의 합,짝수의 합 그리고 팩토리얼을 출력하는 프로그램을 만들어보자.

num = int(input('정수 입력: '))

# 일반 합
sum = 0 
for i in range(1,num+1):
sum += i

# 홀수 합
oddsum = 0
for i in range(1,num+1,2):
oddsum += i

# 짝수 합
evensum = 0
for i in range(0,num+1,2):
evensum += i

# 팩토리얼
fact = 1
for i in range(num,1,-1):
fact *= i

print('합 결과: {}'.format(sum))
print('홀수 합 결과: {}'.format(oddsum))
print('짝수 합 결과: {}'.format(evensum))
print('팩토리얼 결과: {}'.format(format(fact,',')))

[반복문_03] 다양한 삼각형 모양 그리기 - for 구문

1. 별이 1 ~ 5개로 나타내는 일반적인 피라미드 모형

    # 별이 1 ~ 5개까지 있는 피라미드 모양을 만들어보자.
	for i in range(1,6):
  		print('*'*i)

🔻 강사님 풀이

	for i in range(1,6):
    	for j in range(i):
        	print('*', end='')
        print()

2. 1번의 모양에서 오른쪽으로 붙은 피라미드 모형

	# 별이 1 ~ 5개까지 있는 피라미드 모양에서 오른쪽으로 붙은 모양
	for i in range(1,6):
  		print(' '*(6-i) + '*'*i)

🔻 강사님 풀이

for i in range(1,6):
  for j in range(6-i-1):
    print(' ', end='')
  for k in range(i):
    print('*', end='')
  print()

3. 별이 5 ~1개로 줄어드는 피라미드 모형

	# 별이 5 ~ 1개로 줄어드는 피라미드 모형
	for i in range(5,0,-1):
  		print('*'*i)

🔻 강사님 풀이

  for i in range(5,0,-1):
    for j in range(i):
      print('*', end='')
    for k in range(5-i):
      print(' ', end='')
    print()

4. 3번에서 오른쪽으로 붙은 피라미드 모형

	# 3번에서 오른쪽으로 붙은 모형
	for i in range(5,0,-1):
  		print(' '*(5-i) + '*'*i)

🔻 강사님 풀이

  for i in range(5,0,-1):
    for k in range(5-i):
      print(' ', end='')
    for j in range(i):
      print('*', end='')
    print()

5. 증가하다가 감소하는 피라미드 모형

  # 1 ~ 5로 증가했다가 5 ~ 1로 줄어드는 모형 -> 전체 반복되는 줄은 9줄이다
  for i in range(1,10):
    if i < 5: # 5줄 이전까지는
      for j in range(i):
        print('*', end='')
    else:  
      for k in range(10-i):
        print('*', end='')
    print()

6. 각 줄에 해당하는 칸에만 '*'가 붙는 모형

  # 1 ~ 5까지 증가하는데, 줄 수에 해당하는 곳에서만 '*' 찍기
  for i in range(1,6): # i : 1 ~ 5
    for j in range(1,6): # j : 1 ~ 5
      if i == j:
        print('*', end='')
      else:
        print(' ', end='')
    print()   

7. 6과 반대되는 모형

  # 위에서 반대
  for i in range(1,6): # 1 ~ 5까지 내려가면서
    for j in range(5,0,-1): # 5 ~ 1까지 내려오면서
      if i == j:
        print('*', end='')
      else:
        print(' ', end='')
    print()

8. 1 ~ 9까지 홀수만큼 증가하다가 다시 감소하는 모형

[반복문_04]

최소 공배수 문제

# 버스 a,b,c 가 있을 때
# 2대 이상의 버스가 정차하는 시간대를 구해보자.
# 버스 a,b : 오전 6시 첫차, 오후 23시 운행 종료
# 버스 a : 15분 간격, b : 13분 간격
# 버스 c : 6시 20분 첫차, 오후 22시 운행 종료, 8분 간격

busa = 15
busb = 13
busc = 8

# 운행하는 시간 -> 분으로 치환
totalMin = 60 * (23 - 6)

for i in range(totalMin+1): #분 간격으로 돌면서 중복되는 시간을 확인
  # a와 b만 운행하는 시간대 : 6시 ~ 6시 20분 사이, 22시 ~ 23시 사이
  if i < 20 or i > (totalMin - 60):
    if i % busa == 0 and i % busb == 0: # 동시에 정차하는 시간
      print('busA와 busB 동시 정차!', end='')
      hour = 6 + i // 60
      min = i % 60
      print('\t {}:{}'.format(hour,min))
  # a,b,c 모두 운행하는 시간대
  else:
    if i % busa == 0 and i % busb == 0: # 동시에 정차하는 시간
      print('busA와 busB 동시 정차!', end='')
      hour = 6 + i // 60
      min = i % 60
      print('\t {}:{}'.format(hour,min))
    
    elif i % busa == 0 and i % busc ==0:
      print('busA와 busC 동시 정차!', end='')
      hour = 6 + i // 60
      min = i % 60
      print('\t {}:{}'.format(hour,min))
    
    elif i % busb == 0 and i % busc ==0:
      print('busB와 busC 동시 정차!', end='')
      hour = 6 + i // 60
      min = i % 60
      print('\t {}:{}'.format(hour,min))

[반복문_05]

최소 공배수 문제

# 톱니의 개수가 n1, n2인 톱니바퀴가 맞물려 움직일 때,
# 회전을 시작한 후 처음 맞물린 톱니가 최초로 다시 만나게 될때까지의 톱니수와 각각의 바퀴회전수를 출력하자. (n2가 n1 보다 크다)

n1 = int(input('톱니 A 톱니수 입력: '))
n2 = int(input('톱니 B 톱니수 입력: '))

print('톱니 A의 수: {}, 톱니 B의 수: {}'.format(n1,n2))
# n1과 n2의 최소공배수 구하기
list = []
for i in range(1, n1*n2+1):
  if i % n1 == 0 and i % n2 == 0:
    list.append(i)

min_num = min(list) # 최소공배수
n1_circle = min_num // n1
n2_circle = min_num // n2

print('최초 만나는 톱니수(최소공배수): {}톱니'.format(min_num))
print('톱니 A 회전수: {}회전'.format(n1_circle))
print('톱니 B 회전수: {}회전'.format(n2_circle))

[반복문_06]

1번. 간단한 조건

# 윤년 계산기를 만들어보자
# 연도가 4로 나누어떨어지고, 100으로 나누어떨어지지 않으면 윤년이다.
# 또는 연도가 400으로 나누어떨어지면 윤년이다.

year = int(input('연도 입력: '))

result = ''
if (year % 4 == 0 and year% 100 != 0) or (year % 400 == 0):
  result = '윤년!!'
else:
  result = '평년'

print('{}년: {}'.format(year, result))

다음 학습 계획 🔜

파이썬 중급 학습 예정이다. 어려워져도 포기하지 말자🔥

profile
공부한 내용들에 대해 끄적이는 공간입니다💎

0개의 댓글