안녕하세요, 서버관리쪽에서 일하는 서른살 IT뉴비입니다.
개발쪽...이라고 하면 아직은 잘 모르겠고 단지 프로그래밍 공부가 재밌어서
독학을 하고 있습니다.
C언어 책 하나 사서 공부하다가 프로그래밍의 핵심은 알고리즘이라고 하길래
예전에 정보처리기사 공부할 때 배웠던 알고리즘을 대충 프로그램으로 구현해보고 있습니다.
(학원이나 학교 숙제 문제가 아닙니다 ㅠㅠ 순수하게 독학 중 모르는 부분 질문.)
검색은 해보았지만 검색어를 정확하게 뭐라고 해야될지 몰라서 깊게는 못했습니다...
서두는 이쯤하고...
구현하려는 알고리즘은
"입력한 10개의 숫자 중 특정 수(여기선 7)에서 가장 가까운 수 찾기"
입니다.
알고리즘 자체는 아래의 소스로 만들어서 잘 동작하는 것을 확인했는데
혹시나 해서 확인해본 결과 6과 8. 즉 같은 간격(?)을 가진 숫자 2개를
뽑아내려고 하니까 이상한 값이 출력되더라구요.
변수 하나 더 주고 if문으로 만약 min=num2[i] 면 해당 변수에 넣으라고 해서
출력해도 안나오구요...
되도록 스스로 해결해보려고 했는데 으으... 힌트라도 얻고 싶어서 글을 올려봅니다.
#include <stdio.h>
int main(void){
int max,min,min_X,min_Y,i,num2[10];
int num[10]; // 사용할 변수 max는 가장 먼 값, min은 가장 가까운 값, min_X는 가장 가까운 값이 몇번째인지 담아둘 값, num2는 각 숫자별 간격 담아둘 배열
for(i=0;i<10;i++){
printf("num[%d] ->> ",i);
scanf("%d", &num[i]);
}
printf("num ->>\n ");//숫자 10개 입력 받습니다.
max=num[0];
min=num[0];//초기화 해주지 않으면 이상한 값을 출력하기 때문에 배열 안에 있는 숫자로 초기화
for(i=0;i<10;i++){
printf("num[%d]=%d\n ",i, num[i]);
}
for(i=0;i<10;i++){
if(num[i]>7){
num2[i]=num[i]-7;}
else{
num2[i]=7-num[i];
}
}//입력 받은 10개의 숫자에서 목적이 되는 숫자 만큼 빼줍니다.
for(i=0;i<10;i++){
if(max<num2[i]){
max=num2[i];}
if(min>num2[i]){
min=num2[i];
min_X=i;
}
}//빼준 숫자가 각 숫자 별 '간격'이므로 간격 중에 가장 먼 수와 가장 가까운 수를 나타냅니다.
printf("\n");
printf("max=%d\n",max);
printf("min=%d\n",min);
printf("가장 가까운 수 => num[%d]번째\n",min_X);
return 0;
}