꿈꾸는 개발자, Front-end Developer

Trust that the dots will connect in your future.

#CSS #Dev #EJS #HTML #Hexo #JavaScript #dev #jQuery #smallTalk #번역 #삽질 #신세계 #이론 #정보처리기사

알고리즘, 배열에서 특정 수와 가장 가까운 수 구하기


만약 4, 6, 12, 32, 54, 65, 71의 수들 중에서 46과 가장 가까운 수는 무엇일까요?

가장 적은 차이가 나는 54가 가장 가까운 수겠지요.

이번 글에서는 여러 가지 수 중에서 특정 수와 가장 가까운 수를 구하는 알고리즘에 대해 알아보겠습니다.


기본 사항

  • 배열 : 특정 타입의 데이터를 담는 변수들의 묶음.

    변수가 특정 타입의 데이터를 담았다면, 배열은 이들의 묶음을 말합니다.

    예컨대, [4, 6, 12, 32, 54, 65, 71] 과 같이 보통 []으로 데이터들을 담고 ,로 데이터들을 구분합니다.

    ,로 구분된 데이터들은 순서대로 각각의 주소를 갖습니다. ‘첫 번째 데이터, 두 번째 데이터’ 등으로 이해하시면 쉽습니다.

    위 배열의 예에서 4가 ‘첫 번째 데이터’가 되겠네요.

    이를 식으로 표현하면 배열이름(주소)가 됩니다. 예컨대 A(1)은 A배열의 첫 번째 데이터를 의미하는 것이지요.

  • C언어에서는 순서도와 달리 주소를 []안에 표시합니다.

    예컨대, 순서도의 A(i)은 C언어에서 A[i]로 표기합니다.

  • 정보처리기사 순서도에서 배열 주소는 1에서 시작하지만, C언어는 배열 주소가 0부터 시작합니다.

    예컨대, 순서도에서 배열 A의 첫 번째 데이터 주소는 A(1)이지만, C언어에서는 A[0]로 표시합니다.

    (반복문 조건의 범위가 달라지니 주의하세요!)


순서도에서 배열은 다음과 같은 방법으로 사용할 수 있습니다.

  1. 배열의 이름과 크기를 선언한다.
  2. 배열 값들을 주소와 함께 정의한다.

배열의 크기는 배열이 몇 개의 공간을 갖는지에 관한 것이고 이를 미리 정해줘야 합니다.

배열 값은 주소와 함께 해당 값을 정의하면 되는데 배열이름(주소) = 값 A(2) = 6과 같이 정의할 수 있습니다.

마찬가지로 변수에 배열 값을 담을 때는 변수이름 = 배열이름(주소) B = A(3)과 같이 정의하면 됩니다.



배열에서 특정 수와 가장 가까운 수 구하기

10미만의 정수 5개를 입력 받아 배열에 저장한 뒤 그 중 3과 가장 가까운 수를 구하는 알고리즘을 알아보겠습니다.

특정 수에 가장 가까운 수라는 것은 다른 수와의 차이보다 두 수의 차이가 적게 난다는 것을 의미합니다.

따라서 배열의 모든 값과 3과의 차이를 각각 구한 뒤 그 중 최소값을 갖는 배열 값을 찾으면 될 것입니다.

정리하자면,

  1. 5개의 수를 입력 받아 배열에 저장한다.
  2. 배열의 데이터와 3과의 차이값을 구한다.
  3. 차이값들을 비교하여 가장 작은 차이값, 즉 최소값을 구한다.
  4. 최소값을 갖는 데이터를 변수에 저장하여 출력한다.

이를 순서도로 나타내면 다음과 같습니다.

none


이를 C로 나타내면 다음과 같습니다.

int A[5];
int MIN = 9, L, M, i;
i = 0;
do {
scanf("%d", &A[i]);
i++;
} while ( i < 5);
for (i = 0; i < 5; i++) {
if(A[i] < 3) {
L = 3 - A[i];
} else {
L = A[i] - 3;
}
if(L < MIN){
MIN = L;
M = A[i];
}
}
printf("%d", M);

이를 JavaScript로 나타내면 다음과 같습니다.

function closestNumber(){
var A = [1,2,5,6,8];
var MIN = 9;
var L = 0;
var M = 0;
for(var i = 0; i < 5; i++){
if (A[i] < 3){
L = 3 - A[i];
} else {
L = A[i] - 3;
}
if ( L < MIN ){
MIN = L;
M = A[i];
}
}
return console.log(M);
}

JavaScript에서는 임의의 배열과 값을 선언한 뒤 진행하였습니다.


이번 알고리즘은 배열을 오름차순, 혹은 내림차순으로 정렬할 때 사용하는 알고리즘과 유사하니

잘 익혀두면 정렬과 관련한 알고리즘을 익힐 때 유용할 듯 합니다.

이상입니다 :)


* 오류가 있다면 알려주세요. 큰 도움이 됩니다! *

#JavaScript #이론 #정보처리기사