예전에 기사자격증준비하면서 쓴건데 혹 도움될까싶어....
5일발표나고 오늘 찾으러갔다왔습니다. 얼마전 셤쳤는데 진짜유용하게 썼네여...(3점의 위력이 이렇게무서울줄이야...ㅡ.ㅡㅋ)
알고리즘에 대해 조금감이 오시는분들은 읽지마세여....괜히시간낭비하실까봐....;;;;;;^^
그럼 모두들 좋은결과있기를...........^^*
비록 예전보단 실기가 더 어려워졌다지만 오히려 이 자격증을 써먹을수 있는사람에게는 훨씬더 도움이 될만한 자격증인거같네여......알고리즘이란거 프로그래밍입문하는 사람들한테는 꼭 필요한건데...ㅡ.ㅡ
하지만 여기 대부분 가산점땜에 따려는분들 많을텐데 그런분들한테는 쥐약이 될수도 있겠단 생각이 들지만 그럴수록 더더욱 집중해서 파고들면 어느순간 이해가 막 되면서 자신감이 생길수도 있을거에요.
저도 아직은 막막하긴 하지만 조금씩 그나마 길이 보이는것도 같기도 해서....ㅡ.ㅡ;;;
우선 알고리즘을 하기전에 몇가지 기본적개념부터 알고 시작하시면 더 도움이 될거같아요.
알고리즘을 왜 짜느냐? 그건 인간과 컴터의 차이겠죠. 컴터는 멍청하기때문에이렇게 알고리즘을 만들어줘야 결과값을 만들어내기땜에.....
예를들면 1+3+5+7+9+.....다음에 뭐가올거같나요? 우린 딱보면 바로 11이 나오지만 컴터는 추론능력이 없기때문에 맨처음 1만 대입해주면 그담부턴 1+3+5+7....이란 식이 나올수있게 수식을 만들어주는겁니다. 계산은 컴터 니가 하라고 하면서.....컴터는 그나마 유일하게 인간보다 나은게 계산능력하나만큼은 졸~~~~~~~~라 빠르단거죠. 더하고 빼고 나누고 곱하고 그런건 졸라 빠르니까 규칙적으로 계산할수 있는 수식만 만들어주기만 하는건데 그렇게 우리가원하는 올바른 결과가 도출될수있도록 프로그램을 짜는핵심적인 부분이 알고리즘이라 할수있겠죠.
그다음 변수란 개념입니다. 변수가 도대체 뭐냐? 제가보는 책에는 치환한다고 되어있던데(예를들면 i값에 i+1을 치환한다라던지...) 전 치환한다는 말보다 변수에대입한다는 말이 훨씬 더 이해가 빠를거같던데.....아무튼 전 두가지 말을 같은거라 생각하면서 쓰고 있는데요.....
변수란개념!!알고리즘을 들어가기전에 꼭 알고 시작해야한다고 생각합니다.
변수를 설명하려면 메모리란게 뭔지부터 알아야되는데.....
컴터에 메모리란게 있는데요. 쉽게말해 임시기억장치! 전원을 끄면 바로 기억된 자료가 날아가버리는........
그리고 변수는 일종의 그릇이라 생각하세요. 무얼 담는그릇....근데 그릇엔 물도 담을수있고 밥도 담을수있고 과자도 담을수있고 여러가지를 담을수있죠? 근데 물이담겨있는그릇에 밥을 담으려면 어떻게해야되죠? 그렇죠! 물을 덜어내고 밥을 담아야죠. 변수도 마찬가지거든요. 그걸 설명하죠.
i = 0 이란 식이 있다고 합시다. 얼핏보면 우리가 흔히 아는데로 i 이꼬르 0 이라고 하기쉽지만 컴터는 우리와 같이 생각하지 않습니다. 저걸 풀어서 말하면 메모리의 한 공간에 i라는 변수명(변수이름)을 붙이고 거기에 0을 집어넣어라!!!!! 이렇게요~~~!!
그리고 왜 변수냐? 그건 바로 '변하는 수'란 뜻일거에요....
컴터에 메모리란게 있다고 했죠. 이렇게 이해해봅시다. 컴터 메모리는 수만개의 방으로 구성되어 있는데 그중하나의 방에다 i라는 이름(변수명) 을 붙이고 거기에 0을 집어넣어라.
그럼 그방이름은 i이고 그 방속에는 0이란 놈이 자리잡고 있겠죠.
이렇게 대충 변수란게 뭔지 감이 잡히셨으면요......
1+2+3+4+5+6+7+8+9+10 의 합계를 구하는알고리즘을 보기로하죠.
사실 이걸 알려면 기초적인 컴터에 대한 이해나 알고리즘에 대한 초보적인 지식은 알고있어야 훨씬 이해가 빠른디...ㅡ.ㅡ;;;;
결론부터말하면 컴터는 우선 1과 2의 합을 연산합니다.(물론 그전에 먼저 수행하는 식이 있긴하지만...) 그 결과값을 J라고 하죠. 그리고 그 결과값은 메모리에 저장됩니다. 지금은 J = 3이 되겠죠.
그리고 다시 그 J를 불러와서 이번엔 그 결과값에다 3을 더하는 연산을 수행합니다.(1+2+3) 그리고 그 결과값을 아까 결과값이 저장된 방에다 3을 밀어내버리고 6이 자리합니다.
자!어때요? 변수의 방 이름은 J 그대로죠. 근데 그 방안에 있던 숫자들이 막 변하죠? 첨엔 1과 2의 합이던 3, 그담엔 3과3의 합인 6(그럼 바로직전의 3은 없어져버립니다.) 그담엔 6과 4의 합인 10이 자리하겠죠. 그 메모리에......그럼 바로직전의 6은 날아가버리고.......이런식으로 마지막 결과값만 메모리에 저장되고 맨 마지막엔 그 결과값을 출력하게 됩니다.
그럼 이런식을 알고리즘을 짜기위해 맨먼저 해야할건 초기값을 지정해주는건데요....
i = 0 , J = 0 으로 해주고
i = i +1 이란 식을 써줍니다. 그 바로밑에 J = J + i 란 식을 써주구여....
어떻게 갑자기 저런식이 나오게 되었으며 저런건 어떻게 생각해낼수있냐고 하면 뭐라 설명할길이 없지만 거꾸로 저 식을 이용해 하나하나 연산을 수행해보죠.
초기값은 i, J 둘다 0입니다. (참!그리고 컴터는 순차적으로 위에서 아래로 연산을 수행합니다. 넘 당연한 말인거같지만..ㅡ.ㅡ;;;)
그다음 i = i + 1 이란 식이 있죠. 처음 초기값 i가 0이니까 저 식에 0을 대입해서 쓰면 이렇게되겠죠.
0 = 0 + 1 <-이걸 다시 말로 풀어서 쓰면 우변의 0 + 1의 결과값을 좌변에 대입하라(치환하라)
혹은 좌변의 변수 i에다 우변의 0+1의 결과값을 저장하라.
그럼 지금부터 i는 1이 되어있는겁니다.
그리고 J = J + i 란 식이 있죠. J의 초기값은 0이니까 0 = 0 + 1(i값은 1이라고 했으니까) 이 되어있겠죠.
그럼 J도 마찬가지로 J라는 변수에 1의 값이 저장되는겁니다.
근데 우리는 1에서 10까지의 합만 구하면 되니까 i가 10보다 큰지 작은지 비교합니다.
아직은 10보다 작으므로 다시 위로 올라가 계속연산을 수행합니다.
i = i + 1 이란 연산부터요......i값이 1이라고 했으니까 i에다 1만 대입해주면 됩니다.
우변에서 i + 1은 2가 되겠죠. (아직은 i가 1이니까 1+1은 2) 그럼 그 결과값을 좌변의 i란 변수에 집어넣습니다. 그럼 이제 i는 2가 되어있겠네요.
그다음 식!! J = J +i 란 식에서 우변을 살펴보면 방금전 J는 1이니까 1+2가 되겠네요(i값은 2가 되었으니까....)
그럼 그 결과값인 3이 좌변의 J란 변수에입력될테고 이제부터J는 3이 되어있읍니다.
그리고 아직은 i가 10 보다 작으므로 계속 연산을 수행합니다. 반복해서요....(언제까지? i가 10이 될때까지!!! 왜??? 알고리즘에 i <10 이란 조건을 걸어줬는데 10(=i)<10 은 성립하지 않으므로 알고리즘을 빠져나오고 최종결과값이 나오게 될때까지~!!!)
한번만 더 해보면 이제 i에다 2를 집어넣습니다. 그럼 i + 1 즉 2 + 1 해서 3이 되고 그 결과값을 i의 변수에 대입합니다. 이제 i는 3으로 변신되어있습니다.
여기서문제! 지금현재 J는 얼마일까요?
.
.
.
그렇죠!!3 이겠죠. 그럼 식은 3 + i , 즉 3 + 3이 되고 그 결과값 6을 좌변의 J란 변수공간에 대입하겠죠.
이제부터 J는 6이 되어있습니다.
여기까지만 살펴보면요....i는 3이고 J는 6이죠?
즉, 세번째항까지 더하니까 6이 된거고 i는 세번째항이란 말을 나타내는거인거 같고 J는 세번째항까지의 합을 나타낸 그 결과값인거같죠?
맞아여.....이런식으로 계속 반복하다보면 i < 10 을 만족할때까지 계속반복하고 조건을 만족시키지 못하면 바로 식을 탈출하면서 1에서 10까지의 결과값이 나오겠죠.
알고리즘이란게 이런거랍니다. 이런건 어떻게보면 초보자들도 대충 아는거라 굳이 이런설명도 필요없겠단 생각도 들긴하지만.....ㅡ.ㅡ;;;;;;;;
진짜 컴에 대해 전혀 모르는사람이 알고리즘이란게 도대체 뭔가? 라는 궁금증을 가진 사람들이 혹 단 1명이라도 있을까 싶어 주제넘게 주저리주저리 적어봤네용..ㅡ.ㅡ;;;;
그래도알고리즘이 뭔지....그리고 전체적인 흐름이 어떻게되는지 감이라도 잡고 시작하는거하고 전혀 모르는상태에서 시작하는거하곤 능률면에서나 흐름면에서 차이가 마니 나는거같더라구여....
솔직히 말하면 저도 아직은 멍~~한 상태입니다. 아직은 먼소리인지 모를때도 있고.....
하지만 열심히 하다보면 언젠간 저도 다른분들처럼 잘해서 여러분들이 그토록 갖고싶었던 꿈에그리던(?) 자격증을 취득하게 될날도 오겠죠. 그날까지 우리 열심히 해 봅시다..ㅎㅎㅎㅎㅎㅎㅎㅎ
첫댓글 누군지 대단하시네요...글 잘 읽고 갑니다...
컴퓨터의 이중성을 날카롭게 비판해야 할거 같습니다.. 단순한 반복은 엄청난 속도를 낸다는 사실 그렇지만 그렇게 가능하게 해주는게 인간이라는....
정말 이해 쉽게 설명해 주셔서 감사해요*^^*
꼭 필요한 첫걸음이라고 생각합니다^^
대단하십니다~이렇게까지 설명을..알고리즘..열심히 공부합시당~^^
허허...감사합니다...컴터가 그랬나?