[zero-base/] DS Part 1. Python 기초 - 5일차 스터디 노트

손윤재·2023년 12월 8일

제로베이스 DS 22기

목록 보기
6/55
post-thumbnail

파이썬 기초 문제풀이

- 조건문, 반복문


🧩 예제 1

미세먼지(microdust) 비상저감조치로 차량 운행제한 프로그램

- 미세먼지 특정 수치가 150이하면 차량 5부제 실시 (1,6 / 2,7 / 3,8 / 4,9 / 5,0)
- 미세먼지 특정 수치가 150초과면 차량 2부제 실시 (홀수/짝수로 운행 제한)
- 차량 2부제를 실시하더라도 영업용 차량은 5부제 실시
- 미세먼지 수차, 차량 종류, 차량 번호를 입력하면 운행 가능 여부 출력
  import datetime

  today = datetime.datetime.today()
  day = today.day
  limitDust = 150

  mdFigure = int(input('미세먼지 수치 입력 : '))# 170 입력
  carType = int(input('차량 종류 선택 (1.승용차  2.영업용차) : '))# 1
  carNum = # int(input('차량 번호 입력 : ')) ⬅# 8524 

  carEndNum = carNum % 10

  >>> print('-' * 40)
  >>> print('', today)
  >>> print('-' * 40)

  if mdFigure > limitDust and carType == 1:
      if (day % 2) == (carNum % 2):
          >>> print(' 차량 2부제 적용')
          >>> print(' 차량 2부제로 금일 운행제한 대상 차량입니다.')
      else:
          >>> print(' 금일 운행 가능합니다!!')

  if (mdFigure > limitDust and carType == 2) or (mdFigure <= limitDust):
      if (day % 5) == (carNum % 5):
          >>> print(' 차량 5부제 적용')
          >>> print(' 차량 5부제로 금일 운행제한 대상 차량입니다.')
      else:
          >>> print(' 금일 운행 가능합니다!!')

  >>> print('-' * 40)

  # 실행결과
  # ----------------------------------------
  #  2023-12-06 18:34:02.588781
  # ----------------------------------------
  #  차량 2부제 적용
  #  차량 2부제로 금일 운행제한 대상 차량입니다.
  # ----------------------------------------


🧩 예제 2

컴퓨터가 난수를 발생하면 사용가 맞추는 게임

- PC가 난수(1~1000)를 생성하고 사용자는 숫자(정수)를 입력한다.
- 사용자가 난수를 맞추면 게임이 종료된다.
- 만약, 못 맞추면 난수와 사용자 숫자의 크고 작음을 출력한 후
  사용자에게 다시 입력할 기회를 준다.
- 최종적으로 사용자가 시도한 횟수를 출력한다.    

💡 'random' 모듈을 가져와 난수를 생성한다.
   정수인 난수를 생성하기 위해 'randint(start, end)'함수를 사용
  import random

  rNum = random.randint(1, 1000) ⭐
  
  tryCnt = 0
  gameFlag = True
  
  while gameFlag:
      tryCnt += 1
      userNum = int(input('1에서 1,000까지의 정수 입력 : '))

      if rNum == userNum:
          print('빙고!')
          gameFlag = False
      else:
          if rNum > userNum:
              print('난수가 크다. Up~!!')
          else:
              print('난수가 작다. Down!')

  print('난수 : {}, 시도 횟수 : {}'.format(rNum, tryCnt))


🧩 예제 3

별찍기

💡 처음 for문의 range() 범위에서 첫 줄부터 짹어낼 
   공백의 개수와 별의 개수를 파악해 중첩 for문을 작성한다.
image
  for i in range(1, 10):
      if i <= 5: # 1 ~ 5
          for j1 in range(5 - i):
              print(' ', end='')
          for j2 in range(i * 2 - 1):
              print('*', end='')
          print()
      else: # 6 ~ 9
          for j1 in range(i - 5): # 1, 2, 3, 4
              print(' ', end='')
          for j2 in range(19 - (i * 2)): # 7, 5, 3, 1
              print('*', end='')
          print()  


🧩 예제 4

톱니가 각각 n1개와 n2개의 톱니바퀴가 서로 맞물려 회전할 때, 회전을 시작한 후 처음 맞물린 톱니가 최초로 다시 만나게 될 때까지의 톱니의 수와 각각의 바퀴 회전수를 출력한다.

💡 두 바퀴수의 최소공배수를 구한다.
💡 두 바퀴수를 비교해 큰 것은 기준으로 사용하고 작은 것은 Step으로 사용한다.
  # 각 톱니의 전체 바퀴수
  gearATcnt = int(input('Gear A 톱니수 입력 : '))# 12 입력
  gearBTcnt = int(input('Gear B 톱니수 입력 : ')# 7

  # 기준과 단계로 쓸 바퀴수 결정
  stdGear = gearATcnt if gearATcnt > gearBTcnt else gearBTcnt
  stepGear = gearATcnt if gearATcnt < gearBTcnt else gearBTcnt
  accumulate = stdGear
  lcm = 0# the least[lowest] common multiple, 최소공배수

  while True:
      if lcm != 0:
          break

      if accumulate % stepGear == 0:
          lcm = accumulate
          print(f'lcm: {lcm}')
      else:
          accumulate += stdGear

  >>> print('최초로 다시 만나는 톱니수(최소공배수) : {}번째 톱니'.format(lcm))
  >>> print('Gear A 회전수 : {}회전'.format(lcm // gearATcnt))
  >>> print('Gear B 회전수 : {}회전'.format(lcm // gearBTcnt))
  
  # 실행결과
  # 최초로 다시 만나는 톱니수(최소공배수) : 84번째 톱니
  # Gear A 회전수 : 7회전
  # Gear B 회전수 : 12회전


🧩 예제 5

윤년 계산기

< 윤년 조건 > - 연도가 4로 나누어 떨어지고 100으로 나누어 떨어지지 않으면 윤년이다.
			 - 또는 연도가 400으로 나누어 떨어지면 윤년이다.
  targetYear = int(input('연도 입력 : '))

  if (targetYear % 4 == 0 and targetYear % 100 != 0) or (targetYear % 400 == 0):
      print('{}년: 윤년!!'.format(targetYear))
  else:
      print('{}년: 평년'.format(targetYear))

profile
ISTP(정신승리), To Be Data Scientist

0개의 댓글