생각하는 프로그래밍 1부<br />DevRookie<br />프로모션<br />권승진<br />
목차<br />문제점 인식하기<br />알고리즘 선택하기<br />데이터 구조화 하기<br />프로그램 구조에 대하여<br />프로그래밍에서의 사소한 문제<br />
문제점 인식하기<br />
문제점 인식하기<br />어떤 의문이 주어졌을 때 그것을 분석하고 파악하는 방법<br />문제점을 재대로 파악했을 경우의 좋은 예<br />
문제점 인식하기<br />디스크 파일을 어떻게 정렬할까?<br />하는 의문에서 시작<br />
문제점 인식하기<br />대화<br />A : 정렬 하려는 것이 정확히 뭐지? 레코드가 얼마나 많고, 형식이 어떻지?<br />B : 최대 1천만 개의 레코드를 가지고 각각의 레코드는 7자리 정수야. 숫자는 중복되지 않...
문제점 인식하기<br />입력 : 최대 n개의 양의 정수들만을 포함하는 파일로, 각 숫자는 n보다 작고 n = 10의 7승이다. 어떤 숫자가 두번 이상 나오는 것은 치명적 에러이다.<br />출력 : 입력된 정수를 오름...
문제점 인식하기<br />해결 방법을 강구해보자.<br />해결방법 1.<br />입력 파일을 읽어서 작업파일에 저장한다.<br />작업 파일을 토대로 디스크 기반의 머지정렬을 한다.<br />
문제점 인식하기<br />문제를 좀 더 곰곰히 생각해보자.<br />단위가 32bit의 정수형 한 개다.<br />대략 1MB에 250,000개를 올릴 수 있겠군.<br />
문제점 인식하기<br />다시 해결 방법을 강구해보자.<br />해결방법 2.<br />250,000개를 읽어서 메모리에서 정렬<br />을 40번 반복한다.<br />
문제점 인식하기<br />문제를 더 곰곰히 생각해본다.<br />숫자가 두 개 이상 나오지 않는다.<br />1~10^7중에 특정 숫자가 존재 하는지 <br />안 하는지만 구별해놓으면 된다.<br />
문제점 인식하기<br />다시 해결 방법을 강구해보자.<br />해결방법 3.<br />비트 천만 개의 열로 나타내 본다.<br />{ 1, 2, 3, 5, 8, 12, 13}<br />0 1 1 1 0 1 0 0 1 ...
문제점 인식하기<br />
문제점 인식하기<br />핵심<br />정확한 문제 정의<br />작은 문제에 대한 주의 깊은 분석으로 이익을 얻어보자.<br />시간-공간 트레이드오프인 것과 아닌 것<br />시간과 공간은 보통 반비례하지만, 공간이...
알고리즘 선택하기<br />
알고리즘 선택하기<br />어려워보이는 문제지만 간단하면서도 기대하지 않았던 솔루션이 있다.<br />코딩 하기 전, 하는 중, 한 후에 진지하게 생각하려 한다면 누구나 얻을 수 있는 영감<br />
알고리즘 선택하기<br />3가지 문제의 경우에 대해<br />알고리즘 선택이 얼마나 중요한가를 본다.<br />
알고리즘 선택하기<br />문제 A<br />최대 40억 개의 32비트 정수가 랜덤한 순서로 들어있는 순차적 파일이 주어졌을 때 파일에 포함되지 않은 임의의 정수 하나를 찾아라.<br />메모리를 넉넉히 쓸 경우와 아닌...
알고리즘 선택하기<br />문제 A<br />알고리즘 1<br />메모리가 넉넉하면<br />컬럼1과 같은 방법으로 해본다.<br />500메가 메모리로 해결된다.<br />
알고리즘 선택하기<br />문제 A<br />알고리즘 2<br />순차 탐색을 해본다.<br />n번의 탐색 내에서 찾을 수 있다.<br />
알고리즘 선택하기<br />문제 A<br />알고리즘 3<br />이진 탐색을 해본다.<br />log2N 안에서 찾을 수 있다.<br />
알고리즘 선택하기<br />문제 B<br />n개의 원소를 가지는 1차원 벡터를 i만큼 왼쪽으로 회전시켜라.<br />예)<br />n = 8 ,  i =3 일때<br />abcdefgh           ->     ...
알고리즘 선택하기<br />문제 B<br />가장 쉬운 방법<br />
알고리즘 선택하기<br />문제 B<br />저글링 기법<br />
알고리즘 선택하기<br />문제 B<br />반전 알고리즘<br />a’b     ->    a’b’   ->    (a’b’)’  == ba<br />
알고리즘 선택하기<br />문제 C<br />주어진 영단어 사전에서 전철어구 집합 찾기<br />예)<br />pots   -> stop, tops<br />
알고리즘 선택하기<br />문제 C<br />알고리즘 1<br />어떤 단어의 모든 문자의 순열을 고려해본다.<br />22글자의 단어의 전철어구 찾는데 걸리는 시간은 22!<br />22!개의 단어와 사전의 비교<br />
알고리즘 선택하기<br />문제 C<br />알고리즘 2<br />사전자료를 다르게 생각해보자.<br />사전의 모든 단어를 알파벳 순으로 정렬한다.<br />deposit -> deiopst<br />dopiest -...
알고리즘 선택하기<br />핵심<br />정렬<br />탐색<br />표시<br />문제정의<br />문제 해결자의 관점<br />
데이터 구조화 하기<br />
데이터 구조화 하기<br />내부 데이터 구조 바꿈으로서<br />더 간결하고<br />더 좋게 만들 수 있었던 경우<br />
데이터 구조화 하기<br />if( k == 1) c001++;<br />if( k == 2) c002++;<br />	….<br />if( k == 500) c500++;<br />
데이터 구조화 하기<br />for( inti=0; i<500; i++)<br />{<br />	if( k == i) c[i]++;<br />}<br />
데이터 구조화 하기<br />폼 레터 프로그래밍<br />
데이터 구조화<br />에러 메시지 이야기<br />지저분한 시스템<br />에러 메시지가 코드 여기 <br />저기에 흩어져 있고, <br />다른 출력문과 섞여있다.<br />깔끔한 시스템<br />하나의 함수를 통...
데이터 구조화<br />모든 가능한 에러 메시지에 대한 리스트를 만드시오.<br />에러 메시지 이야기<br />지저분한 시스템<br />에러 메시지가 코드 여기 <br />저기에 흩어져 있고, <br />다른 출력문과...
데이터 구조화<br />특화된 데이터를 위한 강력한 도구들<br />Hyper Text<br />Name-Value Pairs<br />Spread Sheet<br />DataBase<br />
데이터 구조화<br />데이터 구조화의 이득<br />실행 시간 감소<br />메모리 사용량 감소<br />포팅과 유지보수의 쉬움<br />
데이터 구조화<br />핵심<br />반복 되는 코드는 배열을 사용하여 다시 작업<br />복잡한 구조는 캡슐화<br />도구를 사용하라<br />코드 작성 전에 데이터 구조 파악에 힘쓰자.<br />
프로그램 구조에 대하여<br />
프로그램 구조에 대하여<br />문제 <br />정렬된 배열 x[0..n-1]이 목표 t를 포함하는가?<br />조건<br />n>= 0이고, x[0] <= x[1] …. <=x[n]<br />n=0이면 빈 배열<br ...
프로그램 구조에 대하여<br />이진 탐색을 활용하면 될 것 같다.<br />의사 코드를 작성해보자.<br />
프로그램 구조에 대하여<br />
프로그램 구조에 대하여<br />
프로그램 구조에 대하여<br />
프로그램 구조에 대하여<br />코드 검증<br />코드의 정확성에 대한 확신을 위한 검증<br />단정문을 사용해서..<br />
프로그램 구조에 대하여<br />
프로그램 구조에 대하여<br />
프로그램 구조에 대하여<br />상세한 경우 이렇게 까지 하지만<br />조금 느슨하게 해도 관계 없다.<br />
프로그램 구조에 대하여<br />핵심 <br />단정문이라는 것<br />순차 구조에서<br />선택 구조에서<br />반복 구조에서<br />함수 에서<br />
프로그램 구조에 대하여<br />검증의 역할<br />버그의 위치<br />다른 버그를 만들지 않으면서 버그 수정<br />
프로그래밍에서의 사소한 문제<br />
프로그래밍에서의 사소한 문제<br />문제 인식<br />알고리즘과 데이터 구조를 선택했다.<br />가상 코드를 만들었다.<br />남은 것은??<br />
프로그래밍에서의 사소한 문제<br />알고리즘과 데이터 구조를 선택했다.<br />가상 구조를 만들었다.<br />남은 것은??<br />실제 구현<br />
프로그래밍에서의 사소한 문제<br />스타일에 따라 서로 다른 무수한 코드들이 나올 수 있다.<br />
프로그래밍에서의 사소한 문제<br />테스트 케이스들을 만들어봅니다.<br />
프로그래밍에서의 사소한 문제<br />1.  잘되는군..<br />2.  잘되는군…<br />멈췄군…<br />
프로그래밍에서의 사소한 문제<br />왜 멈췄을까 디버깅 해볼까?<br />F5<br />
프로그래밍에서의 사소한 문제<br />왜 멈췄을까 디버깅 해볼까?<br />F5<br />F5<br />F5<br />.<br />.<br />.<br />
프로그래밍에서의 사소한 문제<br />.<br />.<br />.<br />
프로그래밍에서의 사소한 문제<br />1.  0 10 20 있는 배열에서 0을 찾아봤다. <br />	x[0]에 있다는군…<br />2.  0 10 20 30 40 있는 배열에서 20을 찾아봤다.<br />	x[2]에 ...
프로그래밍에서의 사소한 문제<br />1.  0 10 20 있는 배열에서 0을 찾아봤다. <br />	x[0]에 있다는군…<br />2.  0 10 20 30 40 있는 배열에서 20을 찾아봤다.<br />	x[2]에 ...
그럼 Column 4에서 봤던 mustbe들을 하나씩 삽입해 봅시다.<br />프로그래밍에서의 사소한 문제<br />
프로그래밍에서의 사소한 문제<br />
프로그래밍에서의 사소한 문제<br /><ul><li> 값이 없을 경우</li></li></ul><li>프로그래밍에서의 사소한 문제<br />이러한 mustbe들을 잘 정의해서 지켜졌다면 프로그램은 안전하다.<br />
전 여기까지 오면서<br />	[5 20]  [5 30]  [5 40]  [2 -5]<br />따위의 입력을 수십 번도 넘게 <br />손으로 쳤습니다.<br />프로그래밍에서의 사소한 문제<br />
테스트 역시 자동화를 시켜봅니다.<br />프로그래밍에서의 사소한 문제<br />s는 이진탐색 함수 호출<br />assert가 발생하지 않은 걸보니 안전한가봅니다!<br />
같은 숫자로 이뤄진 배열도 안전한가요??<br />프로그래밍에서의 사소한 문제<br />assert가 발생하지 않은 걸보니 안전한가봅니다!<br />
안전성은 확보한 것 같습니다! <br />그럼 이제 수행시간을 측정해 봅시다!<br />프로그래밍에서의 사소한 문제<br />
프로그래밍에서의 사소한 문제<br />
프로그래밍에서의 사소한 문제<br />핵심<br />스캐폴딩<br />프로그램 동작과는 관계 없는 개발자용 코드<br />
프로그래밍에서의 사소한 문제<br />핵심<br />코딩<br />4장의 의사코드를 실제 코드로 만드는 과정<br />
프로그래밍에서의 사소한 문제<br />핵심<br />테스팅<br />시간 측정<br />
결론<br />문제점 인식하기<br />알고리즘 선택하기<br />데이터 구조화 하기<br />프로그램 구조에 대하여<br />프로그래밍에서의 사소한 문제<br />
결론<br />연습, 습관이 필요한 것 같습니다.<br />PT로 느낄 수 없는 무언가가 책엔 있다.<br />책 꼭 한번 읽어보시길 추천..<br />
QnA<br />
참고자료<br />민근형님 이야기<br />생각하는 프로그래밍 도서<br />
감사합니다.<br />
생각하는 프로그래밍 1부
Upcoming SlideShare
Loading in …5
×

생각하는 프로그래밍 1부

2,513 views

Published on

Published in: Technology, Business
0 Comments
4 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
2,513
On SlideShare
0
From Embeds
0
Number of Embeds
2
Actions
Shares
0
Downloads
24
Comments
0
Likes
4
Embeds 0
No embeds

No notes for slide

생각하는 프로그래밍 1부

  1. 1. 생각하는 프로그래밍 1부<br />DevRookie<br />프로모션<br />권승진<br />
  2. 2. 목차<br />문제점 인식하기<br />알고리즘 선택하기<br />데이터 구조화 하기<br />프로그램 구조에 대하여<br />프로그래밍에서의 사소한 문제<br />
  3. 3. 문제점 인식하기<br />
  4. 4. 문제점 인식하기<br />어떤 의문이 주어졌을 때 그것을 분석하고 파악하는 방법<br />문제점을 재대로 파악했을 경우의 좋은 예<br />
  5. 5. 문제점 인식하기<br />디스크 파일을 어떻게 정렬할까?<br />하는 의문에서 시작<br />
  6. 6. 문제점 인식하기<br />대화<br />A : 정렬 하려는 것이 정확히 뭐지? 레코드가 얼마나 많고, 형식이 어떻지?<br />B : 최대 1천만 개의 레코드를 가지고 각각의 레코드는 7자리 정수야. 숫자는 중복되지 않고,그리고 메모리는 1MB정도 사용할 수 있어.<br />
  7. 7. 문제점 인식하기<br />입력 : 최대 n개의 양의 정수들만을 포함하는 파일로, 각 숫자는 n보다 작고 n = 10의 7승이다. 어떤 숫자가 두번 이상 나오는 것은 치명적 에러이다.<br />출력 : 입력된 정수를 오름차순으로 정렬한 리스트<br />조건 : 메모리 1MB가량 사용가능<br />
  8. 8. 문제점 인식하기<br />해결 방법을 강구해보자.<br />해결방법 1.<br />입력 파일을 읽어서 작업파일에 저장한다.<br />작업 파일을 토대로 디스크 기반의 머지정렬을 한다.<br />
  9. 9. 문제점 인식하기<br />문제를 좀 더 곰곰히 생각해보자.<br />단위가 32bit의 정수형 한 개다.<br />대략 1MB에 250,000개를 올릴 수 있겠군.<br />
  10. 10. 문제점 인식하기<br />다시 해결 방법을 강구해보자.<br />해결방법 2.<br />250,000개를 읽어서 메모리에서 정렬<br />을 40번 반복한다.<br />
  11. 11. 문제점 인식하기<br />문제를 더 곰곰히 생각해본다.<br />숫자가 두 개 이상 나오지 않는다.<br />1~10^7중에 특정 숫자가 존재 하는지 <br />안 하는지만 구별해놓으면 된다.<br />
  12. 12. 문제점 인식하기<br />다시 해결 방법을 강구해보자.<br />해결방법 3.<br />비트 천만 개의 열로 나타내 본다.<br />{ 1, 2, 3, 5, 8, 12, 13}<br />0 1 1 1 0 1 0 0 1 0 0 0 1 1 ……<br />
  13. 13. 문제점 인식하기<br />
  14. 14. 문제점 인식하기<br />핵심<br />정확한 문제 정의<br />작은 문제에 대한 주의 깊은 분석으로 이익을 얻어보자.<br />시간-공간 트레이드오프인 것과 아닌 것<br />시간과 공간은 보통 반비례하지만, 공간이 줄어들 수록 시간도 주는 경우가 빈번하다.<br />단순한 디자인<br />간단한 프로그램일수록 신뢰, 안전, 견고적이며 유지보수가 쉽다.<br />
  15. 15. 알고리즘 선택하기<br />
  16. 16. 알고리즘 선택하기<br />어려워보이는 문제지만 간단하면서도 기대하지 않았던 솔루션이 있다.<br />코딩 하기 전, 하는 중, 한 후에 진지하게 생각하려 한다면 누구나 얻을 수 있는 영감<br />
  17. 17. 알고리즘 선택하기<br />3가지 문제의 경우에 대해<br />알고리즘 선택이 얼마나 중요한가를 본다.<br />
  18. 18. 알고리즘 선택하기<br />문제 A<br />최대 40억 개의 32비트 정수가 랜덤한 순서로 들어있는 순차적 파일이 주어졌을 때 파일에 포함되지 않은 임의의 정수 하나를 찾아라.<br />메모리를 넉넉히 쓸 경우와 아닌 경우<br />
  19. 19. 알고리즘 선택하기<br />문제 A<br />알고리즘 1<br />메모리가 넉넉하면<br />컬럼1과 같은 방법으로 해본다.<br />500메가 메모리로 해결된다.<br />
  20. 20. 알고리즘 선택하기<br />문제 A<br />알고리즘 2<br />순차 탐색을 해본다.<br />n번의 탐색 내에서 찾을 수 있다.<br />
  21. 21. 알고리즘 선택하기<br />문제 A<br />알고리즘 3<br />이진 탐색을 해본다.<br />log2N 안에서 찾을 수 있다.<br />
  22. 22. 알고리즘 선택하기<br />문제 B<br />n개의 원소를 가지는 1차원 벡터를 i만큼 왼쪽으로 회전시켜라.<br />예)<br />n = 8 , i =3 일때<br />abcdefgh -> defghabc<br />메모리가 수십바이트 여유 밖에 없다.<br />
  23. 23. 알고리즘 선택하기<br />문제 B<br />가장 쉬운 방법<br />
  24. 24. 알고리즘 선택하기<br />문제 B<br />저글링 기법<br />
  25. 25. 알고리즘 선택하기<br />문제 B<br />반전 알고리즘<br />a’b -> a’b’ -> (a’b’)’ == ba<br />
  26. 26. 알고리즘 선택하기<br />문제 C<br />주어진 영단어 사전에서 전철어구 집합 찾기<br />예)<br />pots -> stop, tops<br />
  27. 27. 알고리즘 선택하기<br />문제 C<br />알고리즘 1<br />어떤 단어의 모든 문자의 순열을 고려해본다.<br />22글자의 단어의 전철어구 찾는데 걸리는 시간은 22!<br />22!개의 단어와 사전의 비교<br />
  28. 28. 알고리즘 선택하기<br />문제 C<br />알고리즘 2<br />사전자료를 다르게 생각해보자.<br />사전의 모든 단어를 알파벳 순으로 정렬한다.<br />deposit -> deiopst<br />dopiest -> deiopst<br />사전을 정렬한다.<br />
  29. 29. 알고리즘 선택하기<br />핵심<br />정렬<br />탐색<br />표시<br />문제정의<br />문제 해결자의 관점<br />
  30. 30. 데이터 구조화 하기<br />
  31. 31. 데이터 구조화 하기<br />내부 데이터 구조 바꿈으로서<br />더 간결하고<br />더 좋게 만들 수 있었던 경우<br />
  32. 32. 데이터 구조화 하기<br />if( k == 1) c001++;<br />if( k == 2) c002++;<br /> ….<br />if( k == 500) c500++;<br />
  33. 33. 데이터 구조화 하기<br />for( inti=0; i<500; i++)<br />{<br /> if( k == i) c[i]++;<br />}<br />
  34. 34. 데이터 구조화 하기<br />폼 레터 프로그래밍<br />
  35. 35. 데이터 구조화<br />에러 메시지 이야기<br />지저분한 시스템<br />에러 메시지가 코드 여기 <br />저기에 흩어져 있고, <br />다른 출력문과 섞여있다.<br />깔끔한 시스템<br />하나의 함수를 통해 <br />에러 메시지에 접근하도록 한다.<br />
  36. 36. 데이터 구조화<br />모든 가능한 에러 메시지에 대한 리스트를 만드시오.<br />에러 메시지 이야기<br />지저분한 시스템<br />에러 메시지가 코드 여기 <br />저기에 흩어져 있고, <br />다른 출력문과 섞여있다.<br />깔끔한 시스템<br />하나의 함수를 통해 <br />에러 메시지에 접근하도록 한다.<br />모든 “심각한” 에러 메시지에 대해 경고음을 발생하시오.<br />에러 메시지를 프랑스어로 번역하시오.<br />
  37. 37. 데이터 구조화<br />특화된 데이터를 위한 강력한 도구들<br />Hyper Text<br />Name-Value Pairs<br />Spread Sheet<br />DataBase<br />
  38. 38. 데이터 구조화<br />데이터 구조화의 이득<br />실행 시간 감소<br />메모리 사용량 감소<br />포팅과 유지보수의 쉬움<br />
  39. 39. 데이터 구조화<br />핵심<br />반복 되는 코드는 배열을 사용하여 다시 작업<br />복잡한 구조는 캡슐화<br />도구를 사용하라<br />코드 작성 전에 데이터 구조 파악에 힘쓰자.<br />
  40. 40. 프로그램 구조에 대하여<br />
  41. 41. 프로그램 구조에 대하여<br />문제 <br />정렬된 배열 x[0..n-1]이 목표 t를 포함하는가?<br />조건<br />n>= 0이고, x[0] <= x[1] …. <=x[n]<br />n=0이면 빈 배열<br />정답은 t가 있는 위치 p (t=x[p], x안에 t가 없으면 p=-1)<br />
  42. 42. 프로그램 구조에 대하여<br />이진 탐색을 활용하면 될 것 같다.<br />의사 코드를 작성해보자.<br />
  43. 43. 프로그램 구조에 대하여<br />
  44. 44. 프로그램 구조에 대하여<br />
  45. 45. 프로그램 구조에 대하여<br />
  46. 46. 프로그램 구조에 대하여<br />코드 검증<br />코드의 정확성에 대한 확신을 위한 검증<br />단정문을 사용해서..<br />
  47. 47. 프로그램 구조에 대하여<br />
  48. 48. 프로그램 구조에 대하여<br />
  49. 49. 프로그램 구조에 대하여<br />상세한 경우 이렇게 까지 하지만<br />조금 느슨하게 해도 관계 없다.<br />
  50. 50. 프로그램 구조에 대하여<br />핵심 <br />단정문이라는 것<br />순차 구조에서<br />선택 구조에서<br />반복 구조에서<br />함수 에서<br />
  51. 51. 프로그램 구조에 대하여<br />검증의 역할<br />버그의 위치<br />다른 버그를 만들지 않으면서 버그 수정<br />
  52. 52. 프로그래밍에서의 사소한 문제<br />
  53. 53. 프로그래밍에서의 사소한 문제<br />문제 인식<br />알고리즘과 데이터 구조를 선택했다.<br />가상 코드를 만들었다.<br />남은 것은??<br />
  54. 54. 프로그래밍에서의 사소한 문제<br />알고리즘과 데이터 구조를 선택했다.<br />가상 구조를 만들었다.<br />남은 것은??<br />실제 구현<br />
  55. 55. 프로그래밍에서의 사소한 문제<br />스타일에 따라 서로 다른 무수한 코드들이 나올 수 있다.<br />
  56. 56. 프로그래밍에서의 사소한 문제<br />테스트 케이스들을 만들어봅니다.<br />
  57. 57. 프로그래밍에서의 사소한 문제<br />1. 잘되는군..<br />2. 잘되는군…<br />멈췄군…<br />
  58. 58. 프로그래밍에서의 사소한 문제<br />왜 멈췄을까 디버깅 해볼까?<br />F5<br />
  59. 59. 프로그래밍에서의 사소한 문제<br />왜 멈췄을까 디버깅 해볼까?<br />F5<br />F5<br />F5<br />.<br />.<br />.<br />
  60. 60. 프로그래밍에서의 사소한 문제<br />.<br />.<br />.<br />
  61. 61. 프로그래밍에서의 사소한 문제<br />1. 0 10 20 있는 배열에서 0을 찾아봤다. <br /> x[0]에 있다는군…<br />2. 0 10 20 30 40 있는 배열에서 20을 찾아봤다.<br /> x[2]에 있다는군…<br />0 10 20 있는 배열에서 -5를 찾아봤다.<br />없군..<br />
  62. 62. 프로그래밍에서의 사소한 문제<br />1. 0 10 20 있는 배열에서 0을 찾아봤다. <br /> x[0]에 있다는군…<br />2. 0 10 20 30 40 있는 배열에서 20을 찾아봤다.<br /> x[2]에 있다는군…<br />0 10 20 있는 배열에서 -5를 찾아봤다.<br />없군..<br />일단은 잘 동작하는듯 보입니다!<br />
  63. 63. 그럼 Column 4에서 봤던 mustbe들을 하나씩 삽입해 봅시다.<br />프로그래밍에서의 사소한 문제<br />
  64. 64. 프로그래밍에서의 사소한 문제<br />
  65. 65. 프로그래밍에서의 사소한 문제<br /><ul><li> 값이 없을 경우</li></li></ul><li>프로그래밍에서의 사소한 문제<br />이러한 mustbe들을 잘 정의해서 지켜졌다면 프로그램은 안전하다.<br />
  66. 66. 전 여기까지 오면서<br /> [5 20] [5 30] [5 40] [2 -5]<br />따위의 입력을 수십 번도 넘게 <br />손으로 쳤습니다.<br />프로그래밍에서의 사소한 문제<br />
  67. 67. 테스트 역시 자동화를 시켜봅니다.<br />프로그래밍에서의 사소한 문제<br />s는 이진탐색 함수 호출<br />assert가 발생하지 않은 걸보니 안전한가봅니다!<br />
  68. 68. 같은 숫자로 이뤄진 배열도 안전한가요??<br />프로그래밍에서의 사소한 문제<br />assert가 발생하지 않은 걸보니 안전한가봅니다!<br />
  69. 69. 안전성은 확보한 것 같습니다! <br />그럼 이제 수행시간을 측정해 봅시다!<br />프로그래밍에서의 사소한 문제<br />
  70. 70. 프로그래밍에서의 사소한 문제<br />
  71. 71. 프로그래밍에서의 사소한 문제<br />핵심<br />스캐폴딩<br />프로그램 동작과는 관계 없는 개발자용 코드<br />
  72. 72. 프로그래밍에서의 사소한 문제<br />핵심<br />코딩<br />4장의 의사코드를 실제 코드로 만드는 과정<br />
  73. 73. 프로그래밍에서의 사소한 문제<br />핵심<br />테스팅<br />시간 측정<br />
  74. 74. 결론<br />문제점 인식하기<br />알고리즘 선택하기<br />데이터 구조화 하기<br />프로그램 구조에 대하여<br />프로그래밍에서의 사소한 문제<br />
  75. 75. 결론<br />연습, 습관이 필요한 것 같습니다.<br />PT로 느낄 수 없는 무언가가 책엔 있다.<br />책 꼭 한번 읽어보시길 추천..<br />
  76. 76. QnA<br />
  77. 77. 참고자료<br />민근형님 이야기<br />생각하는 프로그래밍 도서<br />
  78. 78. 감사합니다.<br />

×