본문 바로가기
  • Top Genius in the world
알고리듬

[알고리듬] #12 불쌍한 파리, 용수철의 길이

by Mr.Algo 2024. 3. 23.
728x90
반응형

파이썬 실습창을 열 수 있습니다.실습창 열기

 

우리는 파이썬 문법 그 자체를 공부하려는 것이 아닙니다.

우리는 창의적 문제해결(CPS:Creatiive Problem Solving) 능력을 높이기 위해서 공부합니다.

많은 문제를 꾸준히 해결하여 봅시다.

 

1. 불쌍한 파리

 

두꺼비가 파리 50마리를 잡아먹었습니다.

개구리는 두꺼비의 반을 잡아먹었고,

잠자리는 개구리의 5분의 1을 잡아먹었고,

암탉은 잠자리의 20배를 잡아먹었습니다.

모두 몇 마리의 파리가 잡아먹혔습니까?

 

위의 문제를 해결하기 위한 프로그램입니다. 

? 부분을 완성하여 보세요.

#(숫자 기호)부터는 입력하지 않아도 됩니다. 참고(주석)입니다. 

답이 180이면 성공입니다.

toad=50                           #두꺼비가 잡아먹은 파리의 마리 수
frog= ?????????????????           #개구리
df= ???????????????????           #잠자리 dragonfly
hen= ???????????????????????      #암탉
fly= ????????????????????????     #파리
print(fly)

 

Test case 1 2 3
입력 60 90 180
출력 216 324 648

Test case는 작성된 프로그램이 바르게 실행되는가 검정하기 위한 것입니다.

입력에 있는 숫자를 두꺼비가 잡아먹은 파리의 수에 입력하여

실행결과가 출력과 같은가 검정하여보세요.

 

더보기
toad=50
frog=toad//2
df=frog//5
hen=df*20
fly=toad+frog+df+hen
print(fly)

˚ 변수의 이름은 기억하기 쉬운 것이 좋습니다. ‘자신에게 친절하라.’는 격언이 있습니다. 
˚  연산자(operator, +, -, *, /, // 등)와 할당기호(=)의 앞과 뒤에 띄우지 않아도 됩니다.
˚  변수와 숫자(상수)를 연산할 때, 변수를 먼저 쓰기 권장합니다. (2 + a)보다 (a + 2)가 좋습니다.  
˚  위의 프로그램에서 ‘toad / 2’로 하지 않고 ‘toad // 2’로 한 것은 동물의 마리수이기 때문입니다.  
˚  1번 라인은 입력(input), 2, 3, 4, 5번은 처리(process), 6번은 출력(output)입니다.
˚  5번 라인과 6번 라인을 합하여 ‘print(toad + frog + dragonfly + hen)’와 같이 하면  처리와 출력이 섞여 있어서 권장하지 않습니다.

 

2. 용수철의 길이

용수철 저울에

10g짜리 추 1개를 달았을 때 용수철의 길이는 12cm이고,

10g짜리 추 3개를 달았을 때 용수철의 길이는 16cm이다.

추를 달지 않았을 때 용수철의 길이는 몇 cm인가?

 

1, 12, 3, 16을 각각 n1, m1, n2, m2에 바인딩하여

추를 달지 않았을 때 용수철의 길이를 구하여 봅시다.

단, n1 보다 n2가 큽니다.

 

● 다음은 해결 방법을 찾는 과정의 예입니다.

단계 핵심 생각 내용
1 생각의 실마리 1개를 달았을 때 늘어나는 용수철의 길이를 알면
저울에 달린 추의 개수와 길이로서
추를 달지 않았을 때 용수철의 길이를 구할 수 있습니다.
<  1개를 달았을 때 늘어나는 용수철의 길이>가 문제해결의 실마리입니다.
2 1개를 달았을 때
늘어나는 길이는 얼마인가?
1개를 달았을 때 12cm, 3개일 때 16cm입니다.
2개가 증가 되어 4cm가 늘어났습니다.
그러므로 추 1개를 달 때 마다 2cm씩 늘어납니다.
3 문제의
처음에서 생각한다.
처음에 추 1개를 달았을 때 용수철의 길이는 12cm입니.
1개를 달면 2cm가 늘어나므로 처음 용수철의 길이는 10cm입니.
4 변수로서
식을 만든다.
상수로서 식을 만들면 ‘12-(16-12)/(3-1)*1’이 됩니다.(이해하세요)
이 방법을 변수를 사용한 식으로 표현하면 됩니다.
5 문제에 있는 값으로
식이 확실한가를
검정한다.
1, 12, 3, 16 등을 입력으로 하여
계산 결과를 확인합니다.
6 다른 임의의 값으로
식을 검정한다.
테스트할 수 있는 값(test case)은 스스로 만들어야 합니다.
예를 들면, 3개일 때 15cm, 7개일 때 27cm인 경우
추를 달지 않으면 6cm이어야 하는데 프로그램을 실행한 결과와 같습니까?

 

● 코딩하기

? 부분에 식을 넣어서 코딩을 완성하여 보세요.

1, 12, 3, 16을 각각 n1, m1, n2, m2에 바인딩하세요.

코드에서 나눗셈은 ‘/’를 사용합시다. 결과가 실수일 수 있습니다.

n1,m1,n2,m2=1,12,3,16
one= ????????????????????????
init= ??????????????????????????
print(init)

n1,m1,n2,m2=1,12,3,16 ==> (1,12,3,16)이 순서대로 (n1,m1,n2,m2)에 바인딩됩니다 (unpacking).

 

다음은 코딩의 예입니다.

n1,m1,n2,m2=1,12,3,16
one=(m2-m1)/(n2-n1)  
init=m1-n1*one
print(init)

- 2번 라인: 추 한개당 늘어나는 길이를는 늘어난 길이를 늘어난 추의 개수로 나누면 됩니다.

- 3번 라인: 원래의 길이는 현재 길이에서 추에 의해 늘어난 길이를 빼어서 구합니다.

                 init=m2-n2*one 으로 코딩할 수도 있습니다.

 

'용수철의 길이' 문제를 충분히 이해하세요.

오늘도 수고 많으셨습니다.

안녕!

728x90
반응형