대학생의 그쩍거림/C 언어
(C 언어) 프로젝트 : 채널 돌리기
탈모탈모대작전
2019. 6. 25. 09:34
728x90
반응형
문제1
빈수는 테레비를 보고 있다.
리모콘이 고장나버렸다.
원하는 버튼으로 가기 위해
1. 원하는 버튼으로 부터 가장 가까운 번호를 찾는다.
2. 거기로 부터 +또는 -하여 원하는 버튼으로 접근한다.
현재 채널이 100일 때, 다음 입력을 받고 문제를 해결해보자.
#include<stdio.h>
#include<stdlib.h>
#include<math.h>
#include<string.h>
#define NOW 100
int main() {
printf("채널 입력 : "); int New_channel; scanf("%d", &New_channel);
printf("고장난 버튼의 개수 입력 : "); int num_Broken; scanf("%d", &num_Broken);
getc(stdin); printf("고장난 버튼 입력 : "); char Broken[21]; gets(Broken);
//printf("%d %d %s\n", New_channel, num_Broken, Broken);
int min = 0;
if (num_Broken == 0) {
printf("버튼 누르는 최소 횟수 : %d",(int)log10(New_channel)+1);
return 0;
}
if (NOW == New_channel) {
min = 0;
}
else {
if (abs(NOW - New_channel) < (log10(New_channel) + 1))
{
min = abs(NOW - New_channel);
}
else {
int up = New_channel, down = New_channel;
char UP[7] = "\0", DOWN[7] = "\0";
while (1) {
up++, down--;
sprintf(UP, "%d", up); sprintf(DOWN, "%d", down);
int U = 0, D = 0;
for (int i = 0; i < strlen(UP); i++) {
for (int j = 0; j < num_Broken; j++) {
if (UP[i] == Broken[2 * j]) {
U = 1; break;
}
}
if (U == 1) {
break;
}
}
for (int i = 0; i < strlen(DOWN); i++) {
for (int j = 0; j < num_Broken; j++) {
if (DOWN[i] == Broken[2 * j]) {
D = 1; break;
}
}
if (D == 1) {
break;
}
}
if (U == 0) {
min = abs(New_channel - up) + strlen(UP);
break;
}
if (D == 0) {
min = abs(New_channel - down) + strlen(DOWN);
break;
}
}
}
}
printf("버튼 누르는 최소 횟수 : %d", min);
return 0;
}
728x90
반응형