[Zero-Base]데이터 취업 스쿨 스터디 노트(1)

강현정·2024년 4월 8일

zero_base

목록 보기
2/54
post-thumbnail

2_57.차량2부제,5부제

  • 차량2부제/5부제

이 개념을 몰라서 문제 푸는데 버벅임이 있었다.

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

전체 코드의 일부분인데 이렇게 해당 일과 나머지가 같지 않을 경우 운행이 가능하도록
조건을 만들어서 해결할 수 있다.

2_58.난수 맞추기

원래는 1000사이의 난수 맞추기인데,확인하기 쉽도록 수를 줄여서 해보았다.

import random

com = random.randint(1,10)
flag  = True
cnt = 0

while flag:
    user = int(input('1에서 10까지의 정수 입력: '))
    cnt += 1
    if user > com:
        print('난수가 작다!')
    elif user < com:
        print('난수가 크다!')
    else:
        print('빙고!')
        break
print(f'난수: {com},시도 횟수:{cnt}')

2_59.홀짝 구분하기

for i in range(1,10):
    if i%2 == 0: print(f'{[i]}: 짝수!')
    else: print(f'{[i]}: 홀수!')

for i in range(10,101):
    if (i // 10) % 2 == 0: #십의자리 짝수인경우
        if (i % 10) == 0:
            print(f'{[i]}십의자리: 짝수!!, 일의자리: 0')
        elif (i % 10) %2 == 0:
            print(f'{[i]}십의자리: 짝수!!, 일의자리: 짝수!!')
        else: print(f'{[i]}십의자리: 짝수!!, 일의자리: 홀수!!')
    else: #십의자리 홀수인경우
        if (i % 10) == 0:
            print(f'{[i]}십의자리: 홀수!!, 일의자리: 0')
        elif (i % 10) %2 == 0:
            print(f'{[i]}십의자리: 홀수!!, 일의자리: 짝수!!')
        else: print(f'{[i]}십의자리: 홀수!!, 일의자리: 홀수!!')

나의 경우는 10까지 따로 그 이후 숫자 따로 반복문을 실행시켰는데,
강사님의 경우 for 문 안에 if 조건문을 사용하여 나누는 방식을 택하여서
새로운 방법을 알게 되었다.

2_60.반복문을 통해 합,팩토리얼 구하기

num = int(input('정수 입력: '))
factorial = 1
hap = 0
hap_even = 0
hap_odd = 0

for i in range(1,num+1):
    hap +=i
    if i % 2 == 0: hap_even += i
    else: hap_odd +=i

while num >= 1:
    factorial *= num
    num -=1

print(f'합 결과 : {hap}')
print(f'홀수 합 결과 : {hap_odd}')
print(f'짝수 합 결과 : {hap_even}')
print(f'팩토리얼 결과 : {factorial:,}')

이때 팩토리얼을 구하는 부분에서 while을 사용하였는데 for문으로도 구현할 수 있다.

for i in range(1,num+1):
    factorial *= i

🌟2_63.최소공배수 구하기(톱니바퀴)

gearB = 0
leastNum = 0

flag = True
while flag:
    if gearA != 0:
        if gearA != leastNum:
            gearA += gearATCnt
        else:
            flag = False
    else:
        gearA += gearATCnt

    if gearB !=0 and gearB % gearATCnt == 0:
        leastNum = gearB
    else:
        gearB += gearBTCnt


print(f'최초 만나는 톱니수(최소공배수): {leastNum}')
print(f'gearA 회전수: {leastNum // gearATCnt}회전')
print(f'gearB 회전수: {leastNum // gearBTCnt}회전')
  • 해결방안

    내가 느끼기에 이 문제가 제일 어려웠다. 그 이유는 최소공배수의 원리가 조금 흐릿하게 남아서 기본 개념을 활용하지 못 해서였다. 최소공배수의 경우 큰 수가 작은 수에 의해 나누어 떨어지는 경우 최소공배수를 구할 수 있기때문에 위의 코드처럼 작성하게 되었다.

2_64.윤년계산기

while True:
    year = int(input('연도 입력: '))
    if (year % 4 == 0 and year % 100 != 0) or \
            (year % 400 == 0):
        print(f'{year}년: 윤년!!')
    else:
        print(f'{year}년: 평년')

반복문과 조건문을 활용한 간단한 문제였다.

“이 글은 제로베이스 데이터 취업 스쿨의 강의 자료 일부를 발췌하여 작성되었습니다.”

0개의 댓글