데이터 스쿨 1주차 학습내용 정리

호진·2023년 11월 4일
0

AI_스쿨

목록 보기
2/51

1주차 학습내용 정리

제로베이스 데이터 스 1주차 학습 내용 정리

이번 주차에서는 파이썬의 기초를 배웠고 이를 이용한 간단한 연습문제를 풀었습니다.

나만의 규칙

어떤 문제를 보더라도 눈으로 보면 다 쉬워보이기 마련이다. 이렇게 되면 오만하게 문제를 풀지않고 넘어갈꺼 같아 이번 파이썬에는 나만의 규칙을 하나 정해서 진행해 보았다.(기초가 중요하다.) 연습문제 강의의 해설을 보기전에 멈춰서 먼저 풀어보고 내 풀이와 강사님의 풀이와 비교해보는 방법이다.
이 방법으로 해보니 반복문과 조건문의 프로그램 실력은 확실히 늘었다고 생각한다. 하지만 10분짜리 강의를 2시간 넘게 붙잡는둥 시간을 너무 많이 쓰게 되는거 같다. 다음주차 부터는 30분이나 1시간을 정해서 시간을 정해서 진행 해야할꺼 같다. 서론 이쯤하고 이번주차에서 가장 긴 시간을 소비하게 하였던 문제들을 소개 하고자 한다.

연습 문제 - 1

국어, 영어, 수학, 과학, 국사 점수를 입력하면 총점을 비롯한 각종데이터가 출력되는 프로그램을 만들어보자

저와 같은 경우 위에서 언급했던거 처럼 먼저 풀어보고 풀이를 보았기 때문에 강사님과 풀이는 다릅니다.

# 한줄로 변수 선언을 하기위해 ;를 사용함
korAvr = 85; enAvr = 82; maAvr = 89; scAvr = 75; hsAvr = 94

# 편차를 구하기 위해 점수를 입력 받음
korScore = int(input('국어 점수 : '))
enScore = int(input('영어 점수 : '))
maScore = int(input('수학 점수 : '))
scScore = int(input('과학 점수 : '))
hsScore = int(input('역사 점수 : '))

# 합계, 평균, 평균 점수의 합계(?), 평균점수의 평균(?)를 구함
totalScore = korScore + enScore + maScore + scScore + hsScore
averScore = int(totalScore / 5)
totalAvrScore = korAvr + enAvr + maAvr + scAvr + hsAvr
averAvrScore = int(totalAvrScore / 5)
# 편차룰 구함
korGap = korScore - korAvr
enGap = enScore - enAvr
maGap = maScore - maAvr
scGap = scScore - scAvr
hsGap = hsScore - hsAvr

print('-'*50)
print('총점 : {}({}), 평균 :{}({})'.format(totalScore,(totalScore - totalAvrScore),averScore,averScore - averAvrScore))
print('-'*50)

평균 값과 입력받은 점수 사이의 차를 변수로 받아 편차를 받는 과정입니다.

# 편차의 크기에 따라서 +를 사용할 지 -를 사용할 지 분기로 나누고 절댓값으로 이를 곱해줌
# str = '+' if korGap >= 0 else '-'
# print('국어 편차 : {}({})'.format(str * abs(korGap), korGap))

# 편차의 크기에 따라서 if문으로 나눠주고 -일때는 앞에 -를 넣어서 +, - 기둥을 만들어줌
print('국어 편차 : {}({})'.format(korScore,(korScore - korAvr)), end='')
if korGap >= 0:
    print('+' * korGap)
else:
    print('-' * -korGap)
print('영어 편차 : {}({})'.format(enScore,(enScore - enAvr)), end='')
if enGap >= 0:
    print('+' * enGap)
else:
    print('-' * -enGap)
print('수학 편차 : {}({})'.format(maScore,(maScore - maAvr)), end='')
if maGap >= 0:
    print('+' * maGap)
else:
    print('-' * -maGap)
print('과학 편차 : {}({})'.format(scScore,(scScore - scAvr)), end='')
if scGap >= 0:
    print('+' * scGap)
else:
    print('-' * -scGap)
print('역사 편차 : {}({})'.format(hsScore,(hsScore - hsAvr)), end='')
if hsGap >= 0:
    print('+' * hsGap)
else:
    print('-' * -hsGap)

print('-'*50)

각 과목의 편차를 계산하여 이 편차에 크기를 if문으로 분기를 나눠 양수면 + 음수면 -를 각항에 곱하여 기둥을 세우는 식으로 처리 하였으나 절댓값을 취하는 방법을 몰라 파이썬의 장점인 앞에 -를 붙여서 강제로 양수로 바꿔 기둥을 세우는 방법으로 해결 하였습니다.

강사님 같은 경우 abs() 함수를 사용하여 절댓값을 취하여 더 스마트하게 처리 하여 문제를 해결하였습니다.

연습문제 - 2

보자마자 최소공배수 구하는 문제라는것은 인지 하였으나 막상 이 개념을 프로그램에 대입 할려하니 막막했던 문제였다. 2시간 정도 고민하다가 결국 해설을 본 문제

# 기어 개수를 입력 받음
gearATCnt = int(input('n1 톱니의 개수를 적어주세요 : '))
gearBTCnt = int(input('n2 톱니의 개수를 적어주세요 : '))

#최소 공배수를 구하기 위한 변수 선언
gearA = 0
gearB = 0
leastNum = 0

우선은 기어의 톱니 개수를 정수 형식으로 받는 코드를 작성하고

flag = True

# 몇회 수행이 아닌 조건에 의한 반복이기 때문에 while문을 사용
while flag:
# 최소공배수와 gearA가 같아질때까지 gearA에 A값을 더함    
    if gearA != 0:
        if gearA != leastNum:
            gearA += gearATCnt
        else:
            flag = False
    else:
        gearA += gearATCnt
# 최소 공배수를 구하기 위해서 A로 나눠질때까지 gearB에 B값을 더함
    if gearB != 0 and gearB % gearATCnt == 0:
        leastNum = gearB
    else:
        gearB += gearBTCnt
        
# 각각의 회전 수를 구하기
aRotate = int(leastNum / gearATCnt)
bRotate = int(leastNum / gearBTCnt)

print('n1의 회전수는 : {}\t n1의 회전수는 : {} \t 맞물린 톱니의 수는 : {}'.format(aRotate, bRotate, leastNum))

while 문으로 최소 공배수가 나올때 까지 반복 시킨다.
해설을 보았을 때는 어려워 보이지 않으나 풀이 과정을 보지않고 풀어보면 막막해지는 문제였다. 코드 리뷰를 해보자면 위에서 gearB에 입력 받은 기어B의 개수를 기어A로 나눠 질때까지 더해주는 방식이다. 나눠진 순간 그게 최소 공배수가 되고 이제 이 최소공배수가 될때까지 gearA에 입력 받은 기어A의 값을 더해주고 같아진 순간 while문을 빠져 나가는 방식으로 진행
이제 최소 공배수를 톱니 개수로 나눠주면 각각의 톱니의 회전 횟수와 최소 공배수를 구할수 있다.

profile
중요한 건 꺽였는데도 그냥 하는 마음

0개의 댓글

관련 채용 정보