Page 283 고등학교 프로그래밍 교과서
P. 283
223쪽 스스로 해결하기 <알고리즘>
int value, v1, v2; 동전수 개수 N 입력
int out[4] = {6, 9, 10, 11}; Q ← (N-1) mod 3
void setup( ) { print “A의 차례"
for (int i = 0; i < 4; i++) N ← (N-Q)
pinMode(out[i], OUTPUT); do
Serial.begin(9600); print "B의 차례"
} Nb ← B가 가져갈 개수 입력
void loop( ) { N ← (N-Nb)
value = analogRead(A0); if N==1 print "B가 승리함"; break;
Serial.println(value); print "A의 차례"
v1 = map(value, 0, 1023, 10, 150); Na ← 3-Nb
v1 = 160-v1; N ← (N-Na)
v2 = map(value, 0, 1023, 0, 10); if N==1 print "A가 승리함"; break;
v2 = 10-v2; while(N>0)
analogWrite(6, v1);
for(int i=1; i<4; i++){
중급
analogWrite(out[i], v2);
delay(500); #include
analogWrite(out[i], 0); #define _CRT_SECURE_NO_WARNINGS
delay(50); int main( )
} {
} int N, Q, Na, Nb;
printf("\n 동전의 개수 = "); scanf("%d", &N);
(가) 변수 v1은 모터의 속도를 제어하기 위한 출력값을 저장하므로 빛의 양에
Q = (N - 1) % 3;
따라 이 값이 역으로 변하도록 다음과 같이 수정한다.
N = N – Q;
(나) 변수 v2는 LED의 밝기를 제어하는 값을 저장하므로 이 값이 역으로 변
do {
하도록 다음과 같이 수정한다.
if (Q == 0) {
printf("\n B가 실수하지 않으면 A가 이길 수 없습니다. \n");
224쪽 컴퓨팅 사고력을 키우는 수행 평가 break;
}
다음과 같이 8개의 동전이 주어졌다고 가정한다. 동전은 교대로
초급
printf("\n %d개 남음, B의 차례 : ", N); scanf("%d", &Nb);
1~2개씩 가져갈 수 있고 마지막(회색) 동전을 가지가는 사람이 게임에서 지
N = N – Nb; // B가 가져간 동전 삭제
게 된다. 여기서 이길 수 있는 전략은 마지막 회색 동전을 제외하고 뒤쪽부터
if (N == 1) { printf("\n B가 승리함\n"); break; }
3개씩 그룹지었을 때, 마지막에 남는 동전을 먼저 가지고 가는 것이다. 만약
Na = 3 – Nb;
동전의 개수가 총 7개라면 3개씩 그룹짓고 남은 동전의 개수가 없으므로 먼
printf("\n %d개 남음, A의 차례 : %d개 가져감 \n", N, Na);
저 가지고 가는 사람이 지게 된다. 왜냐하면, 먼저 한 A가 1개 가져가면 B는
N = N – Na;
2개 가져가고, A가 2개 가져가면 B는 1개 가져가므로 마지막에는 회색 동전
if (N == 1) { printf("\n A가 승리함\n"); break; }
1개만 남고 A가 가져갈 차례이기 때문이다.
} while (N>0);
return 0;
100 100 100 100 100 100 100 100
}
정답 및 해설 281
(책)2015프로그래밍-교과서3차심의본 본문.indb 281 2017-09-05 오후 4:17:14