1

난생 처음 파이썬 프로그래밍 - 2

난생 처음 파이썬 프로그래밍 - 2

노아의 블로그

    목차
반응형

문제 1. 

이런 모양을 만드시오.

(각도는 144도)

 

자, 일단 별 두개 그리기는 매우 간단하다.

 

일단, 별을 그려보도록 하자.

 

주의해야 할 점은 이런 각이 아니라는것이다.

처음에 보는 방향은 오른쪽이고, 별의 다리 모양을 만들기 위해 거북이가 회전해야 하는 각도가 바로  144도란 말씀.

이것이 약간 헷갈림;

 

암튼 이 사실을 상기하고. 별을 그리기 위해 거북이가 몇번 회전하고 움직여야 하냐. 바로 꼭짓점의 개수만큼 회전이 필요하다.

 

그렇다면.. 

 

이렇게 작성할수가 있겠고,

이런식의 모양이 나온다.

 

그렇다면? 뒤로 한칸 가서 동일한 별그리기를 하면 두개가 된다는 소리이다.

 

 

하지만, 별의 모양만이 아닌, 거북이의 위치와 회전값도 같아야 하는 조건이 있었다. 그렇기에 조금 다르게 진행해야했다

 

우선, 문제의 기준이 가운데를 기준으로 그림을 그려야 한다면, 먼저 첫 번째 별을 그린 후

 

마지막으로 이렇게 끝나있어야 한다는 소리이다. 물론 그린 후 추후 이동과 회전을 다시 할 수도 있겠지만 그건 좀 이상하지 않는가. ?

 

지금 상태는 별이 완성이 되지 않은 상태이다.. 따라서 처음에 뒤로 갔다가 다시 앞으로 가서 별을 그리면

저 빨간 직선이 생길것이고, 나머지는 그대로이니 별 두개가 완성될것이다.

 

import turtle
turtle.shape("turtle")

turtle.forward(-200)
turtle.forward(200)

for i in range(0,5):
    turtle.forward(200)
    turtle.right(144)

turtle.right(144)
for i in range(0,3):
    turtle.forward(200)
    turtle.right(144)

turtle.forward(200)

나는 이렇게 진행했다..

 

일단 맞았으니 된거겠지? ㅠ

 

문제 2번

주어진 4자릿수의 정수에서 각 자릿수에 해당하는 숫자들을 더하라.

: 1234가 주어지면 1+2+3+4 = 10.

 

이 문제는 보자마자 나눗셈, 나머지가 떠올랐다. 수를 분해해야하는데 1234라는 수를 보아하자.

일의 자리를 구하려면 1234 그 다음자리 즉 10으로 나눠버리면 된다...왜냐하면, 1000의자리 100의자리 10의자리는 모두 10이라는것이 들어간다. 이것은 변할 수 없는 사실이다. 하지만 일의자리는 10의자리 이상은 들어가지 않는다. 따라서 10으로 나눠버린 나머지는 4가 되고 이것은 일의자리를 나타낸다. 그렇다면 이제 10의자리를 봐보자. 아까와 같은 원리로, 10의자리는 100이 들어가지 않는다. 따라서 100으로 나눈 나머지는 바로 십의자리 숫자가 될 것이다. 

 

34가 나올것인데, 아까 계산했던 4를 빼주어도 되고, 아니면 또 10으로 나누어도 된다. 나는 후자를 택했다. 그러면 3이 나온다.  

 

100의 자리를 구하려면 그 다음자리 1000으로 나눈 나머지를 구하면 된다.

234가 나올것이고 100으로 나누면 2, 

 

다음도 똑같이 10000으로 나눈 나머지 1234니까 1000으로 나눈 몫 1. 

 

누적 4+3+2+1 =5이다.

number = int(input("정수 4자리를 입력하세요."))
digit = 1
sum = 0
for i in range(0,4):
    sum += (number %(digit * 10)) // digit
    digit *= 10
print(sum)

나는 이렇게 생각했는데, 조금 더 좋은 방법이 있었다.

 

이 알고리즘은 수가 커질수록 계산 속도가 굉장히 느려진다. 곱하고 나누고 과정이 좀 많다.

 

이것보다 조금 더 좋은 알고리즘도 원리는 같다. 나누고, 나머지값을 활용하는 것이다.

 

1234에서, 10을 나눈 나머지 값은 4이다. 그럼 4를 누적한다.

다음 1234에서 10을 나눠버린다. 그러면 123이 된다. 이 수를 또 10을 나눈 나머지 값을 이용한다 그럼 3이다. 또 123을 10으로 나눈다. 12이다. 반복하면 결국 숫자를 얻을 수 있게 된다.

#최적화 버전
number = int(input("정수 4자리를 입력하세요."))
sum = 0
for i in range(0,4):
    sum += number % 10
    number //= 10
print(sum)

좀더 생각하는 방법을 길러야겠다. ㅠㅠ 이걸 생각 못하다니! 

 

 

문제는 이제 끝. 

기억해야 할 것!

 

먼저 파이썬은 C언어와 달리

정수와 정수도 / (나눗셈)을 하면 실수형(float)가 되버린다. 떨어지는 것도 무조건 실수가 되버린다.

예를 들어서, 10 / 2를 파이썬으로 계산한다면, 5.0이 출력된다. 이 사실을 기억하는게 좋을 것 같다.

 

파이썬에는 // 나눗셈 기호를 두개 사용해서 나눗셈을 진행하는 것도 가능한데, 이것은 소숫점을 제거한 나눗셈이다.

반올림 X 그냥 소숫점을 버린다. 이것도 기억하는게 좋을 것 같다.

 

그 외, ** (제곱) %(나머지) 이런 산술 연산자가 있다. 

 

-끝

반응형