SlideShare a Scribd company logo
(진짜로) 
안녕하세요?
구종만 
• 각종 프로그래밍 대회 (옛날~) 
! 
• http://algospot.com (’07~) 
! 
• 알고리즘 문제 해결 전략 (’11) 
! 
• DRW Trading Group (~’09) 
! 
• GETCO (~’13)
Algorithms: 
기술 사회의 연금술 
@jongman
인물 스무고개 
! 
(현실 인물, 만화/소설 등장인물)
http://kr.akinator.com/
이미지 리사이징
돌돔 뚊
Context Aware Resizing
http://www.youtube.com/watch?v=c-SSu3tJ3ns
“충분히 진보된 기술은 
마법과 구분되지 않는다.” 
! 
- Arthur C. Clarke
과거의 마법들
놀라운 일들은 
어떻게 구현될까?
대중의 인식.jpg
흑마법.jpg
모르는 자에겐 마법이지만 
! 
아는 자에겐 예술일 뿐!
큰 그림은 알 수 있다! 
“검색 엔진? 역색인 만들어서 검색하고, 용량 많 
으니 분산 처리 잘 하고, 스팸 걸러내기랑 랭킹 
신경 잘 써야지.” 
“얼굴 인식? 얼굴 윤곽 인식하고, 눈코입 크기랑 
위치 사용해서 분류하면 되지.”
전산학이 현대의 마법이라면 
! 
알고리즘은 그 기초
알고리즘
재미 없는 정의 
• 약간은 모호한 정의: 
• “컴퓨터가 주어진 작업을 수행하는 방법” 
• 소스 코드 != 알고리즘
예제 문제 - 정렬 
[6,6,6,8,5,8,7,6,6,7,3] 
! 
을 정렬하면 
! 
[3,5,6,6,6,6,6,7,7,8,8]
퀵소트 
(T. Hoare, 1960)
한 문제를 여러 방법으로 
풀 수 있어요
힌트: 
DTD
사실 입력은 LG 순위! 
[6, 6, 6, 8, 5, 8, 7, 6, 6, 7, 3]
빈도 수를 세자 
[6, 6, 6, 8, 5, 8, 7, 6, 6, 7, 3] 
{3: 1, 5: 1, 6: 5, 7: 2, 8: 2}
정렬 결과 복구! 
[6, 6, 6, 8, 5, 8, 7, 6, 6, 7, 3] 
{3: 1, 5: 1, 6: 5, 7: 2, 8: 2} 
[3, 5, 6, 6, 6, 6, 6, 7, 7, 8, 8]
새 알고리즘 
고안 과정
주식투자
가락동의 현인!
저의 미래.jpg
가장 돈을 많이 번 구간을 
찾아보자!
다 해본다! 
…. 
…. 
…. …. 
…. 
….
성능 측정
성능 측정 
입력 크기 simple() 
1천 0.17초
성능 측정 
입력 크기 simple() 
1천 0.17초 
1만 16초
성능 측정 
입력 크기 simple() 
1천 0.17초 
1만 16초 
10만 1568초
성능 측정 
입력 크기 simple() 
1천 0.17초 
1만 16초 
10만 1568초 
100만 (약) 43시간 
1000만 (약) 181일
새 아이디어: 각개격파
반으로 쪼개자! 
정답 구간은: 
= + 
• 왼쪽 절반에 있거나, 오른쪽 절반에 있거나 
• 왼쪽에서 시작 - 오른쪽에서 끝
걸쳐 있는 경우
성능 측정 
입력 크기 simple() divide…() 
1천 0.17초 0.002초 
1만 16초 0.02초 
10만 1568초 0.2초 
100만 (약) 43시간 3초 
1000만 (약) 181일 27초
새 아이디어: 
최대값 - 최소값
문제:
아.. 안돼
지금까지의 최소값!
성능 측정 
입력 크기 simple() divide…() fast() 
1천 0.17초 0.002초 0.000008초 
1만 16초 0.02초 0.008초 
10만 1568초 0.2초 0.08초 
100만 (약) 43시간 3초 0.8초 
1000만 (약) 181일 27초 8초
교훈 
• 같은 문제를 푸는 여러 방법들 간에 큰 성능 차 
이가 있다! 
• 입력이 커지면 커질 수록 알고리즘간의 성능 차 
이는 커진다!
아까 보여준거랑 
너무 차이나는데요?
천릿길도 한 걸음부터 
• 간단한 알고리즘은 어려운 알고리즘의 구성 요 
소가 된다 
• 많은 알고리즘은 설계 “기법” 혹은 “원칙”들을 
공유한다 
• Akinator와 리사이징도 알고 보면 간단!
Akinator 파헤치기
표로 만들어 보기 
여자?         
30세 이상?         
정치인?         
미국인?        
첫 번째 질문? 
여자?         
30세 이상?         
정치인?         
미국인?        
첫 번째 질문? 
여자?         
30세 이상?         
정치인?         
미국인?        
두 번째 질문? 
여자?         
30세 이상?         
정치인?         
미국인?        
두 번째 질문? 
여자?         
30세 이상?         
정치인?         
미국인?        
새 정보 받아들이기 
여자?         
30세 이상?         
정치인?         
미국인?        
“이 둘을 어떻게 구분하나요?” 
여자?         
30세 이상?         
정치인?         
미국인?        
사용자 입력 
여자?         
30세 이상?         
정치인?         
미국인?         
가수?  
부분적 정보에서 배우기 
여자?         
30세 이상?         
정치인?         
미국인?         
가수?  
괜히 한번 물어보기 
여자?         
30세 이상?         
정치인?         
미국인?         
가수?  
괜히 한번 물어보기 
여자?         
30세 이상?         
정치인?         
미국인?         
가수?  
결과가 이랬다면 
여자?         
30세 이상?         
정치인?         
미국인?         
가수?  
아하! 
여자?         
30세 이상?         
정치인?         
미국인?         
가수?   
불확실성 해결하기 
• “김정은은 정치인인가요?” 
• “엘사는 정치인인가요?” 
• “김정은이 작년에 30살이 되었어요!” 
• “잘생겼습니까?”
모든 것을 확률로 
여자? 100% 100% 0% 0% 100% 100% 100% 100% 
30세 이상? 0% 100% 100% 80% 90% 0% 100% 0% 
정치인? 0% 100% 100% 100% 0% 0% 0% 70% 
미국인? 0% 0% 100% 0% 100% 20% 100% 10%
이미지 리사이징 파헤치기
아이디어: 
한번에 한칸만 지워보자
어느 칸을 줄일까?
아이디어: 제일 티 안나게!
“티 안난다”의 정의
“티 안난다”의 정의
“티 안난다”의 정의
1 2 2 2 1 0 2 2 0 4 4 0 1 1 0 0 1 2 3 1 1 0 3 1 1 1 0 0 0 1 
0 1 2 3 2 0 2 2 0 5 4 1 1 1 0 0 1 2 3 0 1 0 2 0 1 0 0 0 0 0 
1 1 1 3 3 0 2 2 1 4 3 1 2 1 0 0 0 3 4 1 1 0 1 1 0 0 0 0 0 0 
1 1 1 4 4 0 1 1 1 4 2 0 2 2 0 1 0 2 4 1 1 1 1 1 0 1 0 0 0 0 
1 1 1 3 4 1 0 1 1 3 2 0 2 2 0 1 1 2 4 2 2 2 1 1 1 1 0 0 0 1 
1 1 1 2 3 1 1 0 1 3 2 0 1 1 0 0 1 1 4 2 2 2 0 1 2 1 1 1 1 1 
1 1 1 2 2 1 1 1 2 3 1 1 1 1 0 0 1 0 4 2 3 1 0 2 2 0 1 0 0 0 
1 1 1 2 2 0 1 0 3 3 1 0 1 0 0 0 1 0 4 2 3 1 0 2 2 0 1 0 0 0 
1 0 1 2 2 1 0 0 2 2 1 0 0 0 0 0 2 1 4 2 3 0 1 2 1 0 0 0 0 0 
1 1 1 2 1 1 0 1 2 2 1 0 0 0 1 0 2 1 3 1 3 0 2 2 0 0 0 0 0 0 
1 1 1 2 1 1 0 1 2 1 1 0 0 0 1 1 2 0 2 1 2 0 3 2 1 1 0 0 0 1 
1 1 1 2 1 0 0 1 1 1 1 0 0 0 0 1 2 0 2 1 2 0 3 1 1 1 0 0 1 1 
1 1 2 2 1 0 0 1 1 1 1 0 0 0 0 1 2 0 3 1 2 0 2 1 1 2 0 0 1 1 
1 1 2 2 1 0 0 1 0 1 1 0 0 0 0 2 2 0 3 1 2 0 2 1 0 1 0 0 1 0 
1 1 1 2 1 0 0 1 0 1 1 0 0 0 0 1 2 0 3 1 2 0 1 1 0 1 0 0 0 1 
1 1 1 1 1 0 1 1 0 1 1 1 0 1 1 1 1 0 3 2 2 0 1 0 0 0 1 0 0 1 
1 2 2 1 1 0 0 0 0 0 1 1 0 0 0 1 1 0 3 2 2 0 0 1 1 0 1 0 1 0 
1 2 1 1 1 0 0 0 0 0 1 1 1 0 0 1 1 0 3 2 1 0 0 0 1 0 2 0 1 0 
1 2 1 1 1 0 0 0 0 0 0 1 0 0 0 2 1 0 3 2 1 1 0 0 1 0 1 0 1 0 
1 1 1 1 0 0 0 0 0 0 0 1 0 0 0 2 1 1 3 3 1 2 0 0 0 0 1 0 1 0 
1 0 1 2 0 0 1 0 0 1 1 2 1 0 0 2 1 1 3 3 2 2 0 0 0 0 1 0 1 0 
2 1 1 2 1 1 1 1 0 0 1 2 2 1 0 3 1 1 2 1 2 1 0 0 0 0 1 0 1 0 
1 1 1 2 1 1 1 1 1 1 0 1 2 2 0 2 1 0 2 1 1 1 0 0 0 1 0 1 1 0 
1 1 0 1 0 0 1 1 2 1 0 0 2 2 0 2 2 1 2 1 1 1 0 0 0 1 0 0 1 1 
1 1 0 1 0 0 0 2 2 2 1 0 2 2 0 2 2 1 1 1 1 1 0 0 1 1 0 0 0 1 
1 1 0 1 1 1 0 1 2 2 1 0 1 2 0 2 2 0 0 0 1 1 0 1 1 2 0 0 0 2 
1 1 0 1 1 0 0 1 2 3 2 0 1 2 0 1 2 1 0 0 1 1 0 1 2 2 0 0 1 1 
0 1 1 0 0 0 0 0 1 2 2 1 0 1 0 1 1 2 1 1 2 1 1 1 3 2 1 0 0 1 
0 1 1 0 0 0 0 0 1 2 1 1 0 0 0 0 0 1 2 0 3 1 1 0 3 1 1 0 0 0
1 2 2 2 1 0 2 2 0 4 4 0 1 1 0 0 1 2 3 1 1 0 3 1 1 1 0 0 0 1 
0 1 2 3 2 0 2 2 0 5 4 1 1 1 0 0 1 2 3 0 1 0 2 0 1 0 0 0 0 0 
1 1 1 3 3 0 2 2 1 4 3 1 2 1 0 0 0 3 4 1 1 0 1 1 0 0 0 0 0 0 
1 1 1 4 4 0 1 1 1 4 2 0 2 2 0 1 0 2 4 1 1 1 1 1 0 1 0 0 0 0 
1 1 1 3 4 1 0 1 1 3 2 0 2 2 0 1 1 2 4 2 2 2 1 1 1 1 0 0 0 1 
1 1 1 2 3 1 1 0 1 3 2 0 1 1 0 0 1 1 4 2 2 2 0 1 2 1 1 1 1 1 
1 1 1 2 2 1 1 1 2 3 1 1 1 1 0 0 1 0 4 2 3 1 0 2 2 0 1 0 0 0 
1 1 1 2 2 0 1 0 3 3 1 0 1 0 0 0 1 0 4 2 3 1 0 2 2 0 1 0 0 0 
1 0 1 2 2 1 0 0 2 2 1 0 0 0 0 0 2 1 4 2 3 0 1 2 1 0 0 0 0 0 
1 1 1 2 1 1 0 1 2 2 1 0 0 0 1 0 2 1 3 1 3 0 2 2 0 0 0 0 0 0 
1 1 1 2 1 1 0 1 2 1 1 0 0 0 1 1 2 0 2 1 2 0 3 2 1 1 0 0 0 1 
1 1 1 2 1 0 0 1 1 1 1 0 0 0 0 1 2 0 2 1 2 0 3 1 1 1 0 0 1 1 
1 1 2 2 1 0 0 1 1 1 1 0 0 0 0 1 2 0 3 1 2 0 2 1 1 2 0 0 1 1 
1 1 2 2 1 0 0 1 0 1 1 0 0 0 0 2 2 0 3 1 2 0 2 1 0 1 0 0 1 0 
1 1 1 2 1 0 0 1 0 1 1 0 0 0 0 1 2 0 3 1 2 0 1 1 0 1 0 0 0 1 
1 1 1 1 1 0 1 1 0 1 1 1 0 1 1 1 1 0 3 2 2 0 1 0 0 0 1 0 0 1 
1 2 2 1 1 0 0 0 0 0 1 1 0 0 0 1 1 0 3 2 2 0 0 1 1 0 1 0 1 0 
1 2 1 1 1 0 0 0 0 0 1 1 1 0 0 1 1 0 3 2 1 0 0 0 1 0 2 0 1 0 
1 2 1 1 1 0 0 0 0 0 0 1 0 0 0 2 1 0 3 2 1 1 0 0 1 0 1 0 1 0 
1 1 1 1 0 0 0 0 0 0 0 1 0 0 0 2 1 1 3 3 1 2 0 0 0 0 1 0 1 0 
1 0 1 2 0 0 1 0 0 1 1 2 1 0 0 2 1 1 3 3 2 2 0 0 0 0 1 0 1 0 
2 1 1 2 1 1 1 1 0 0 1 2 2 1 0 3 1 1 2 1 2 1 0 0 0 0 1 0 1 0 
1 1 1 2 1 1 1 1 1 1 0 1 2 2 0 2 1 0 2 1 1 1 0 0 0 1 0 1 1 0 
1 1 0 1 0 0 1 1 2 1 0 0 2 2 0 2 2 1 2 1 1 1 0 0 0 1 0 0 1 1 
1 1 0 1 0 0 0 2 2 2 1 0 2 2 0 2 2 1 1 1 1 1 0 0 1 1 0 0 0 1 
1 1 0 1 1 1 0 1 2 2 1 0 1 2 0 2 2 0 0 0 1 1 0 1 1 2 0 0 0 2 
1 1 0 1 1 0 0 1 2 3 2 0 1 2 0 1 2 1 0 0 1 1 0 1 2 2 0 0 1 1 
0 1 1 0 0 0 0 0 1 2 2 1 0 1 0 1 1 2 1 1 2 1 1 1 3 2 1 0 0 1 
0 1 1 0 0 0 0 0 1 2 1 1 0 0 0 0 0 1 2 0 3 1 1 0 3 1 1 0 0 0
천릿길도 한 걸음부터 #2 
• 이미지 높이가 한 줄이라고 생각해 봅시다 
2 2 1 0 0 2 2 1 0 0 0 
2 1 1 0 1 2 2 1 0 0 0 
2 1 1 0 1 2 1 1 0 0 0 
2 1 0 0 1 1 1 1 0 0 0 
….
천릿길도 한 걸음부터 #2 
• 생각할 것도 없네 
2 2 1 0 0 2 2 1 0 0 0 
2 1 1 0 1 2 2 1 0 0 0 
2 1 1 0 1 2 1 1 0 0 0 
2 1 0 0 1 1 1 1 0 0 0 
….
천릿길도 두 걸음부터 
• 이미지가 두 줄이라고 생각해 봅시다 
2 2 1 0 0 2 2 1 0 0 0 
2 1 1 0 1 2 2 1 0 0 0 
2 1 1 0 1 2 1 1 0 0 0 
2 1 0 0 1 1 1 1 0 0 0 
….
천릿길도 1.1 걸음부터 
• 두 번째 줄의 한 칸만 생각해 봅시다 
2 2 1 0 0 2 2 1 0 0 0 
2 1 1 0 1 2 2 1 0 0 0 
2 1 1 0 1 2 1 1 0 0 0 
2 1 0 0 1 1 1 1 0 0 0 
….
천릿길도 1.1 걸음부터 
• 여기까지 내려오는 가장 짧은 경로는? 
2 2 1 0 0 2 2 1 0 0 0 
2 1 1 0 1 2 2 1 0 0 0 
2 1 1 0 1 2 1 1 0 0 0 
2 1 0 0 1 1 1 1 0 0 0 
….
천릿길도 1.1 걸음부터 
• 최소 합은 1이구나! 
2 2 1 0 0 2 2 1 0 0 0 
2 1 1 0 1 2 2 1 0 0 0 
2 1 1 0 1 2 1 1 0 0 0 
2 1 0 0 1 1 1 1 0 0 0 
….
이제 2 걸음 
• 모든 칸에 대해 최소 합을 갱신 
2 2 1 0 0 2 2 1 0 0 0 
4 2 1 0 1 2 3 1 0 0 0 
2 1 1 0 1 2 1 1 0 0 0 
2 1 0 0 1 1 1 1 0 0 0 
….
2.1 걸음 
• 빨간 칸까지 내려오는 가장 작은 경로 합은? 
2 2 1 0 0 2 2 1 0 0 0 
4 2 1 0 1 2 3 1 0 0 0 
2 1 1 0 1 2 1 1 0 0 0 
2 1 0 0 1 1 1 1 0 0 0 
….
네 3입니다! 
• 이렇게 반복하면 최단 경로를 찾을 수 있어요 
2 2 1 0 0 2 2 1 0 0 0 
4 2 1 0 1 2 3 1 0 0 0 
2 1 1 0 1 3 1 1 0 0 0 
2 1 0 0 1 1 1 1 0 0 0 
….
참 쉽죠?
결론
세상을 바꾸는 힘 
• 좋은 식견을 갖춘 개발자의 중요 요건 
• 밖에서 보면 놀라워도 
• 직접 해 보면 비교적 쉽다 
• 재미나게 공부해서 더 좋은 개발자가 되자!
어떻게 공부하나?
어떻게 공부하나?
프로그래밍 대회
책광고 
한권만 사주십쇼 
(굽신굽신)
감사합니다

More Related Content

Viewers also liked

스쿱미디어 회사 소개서 (150820) 외부용
스쿱미디어 회사 소개서 (150820) 외부용스쿱미디어 회사 소개서 (150820) 외부용
스쿱미디어 회사 소개서 (150820) 외부용
SKOOPMEDIA
 
[소프트웨어교육] 알고리즘 교사 연수 자료
[소프트웨어교육] 알고리즘 교사 연수 자료[소프트웨어교육] 알고리즘 교사 연수 자료
[소프트웨어교육] 알고리즘 교사 연수 자료
Sangsu Song
 
Front-End 개발의 괜찮은 선택 ES6 & React
Front-End 개발의 괜찮은 선택  ES6 & ReactFront-End 개발의 괜찮은 선택  ES6 & React
Front-End 개발의 괜찮은 선택 ES6 & React
지수 윤
 
React Native를 사용한
 초간단 커뮤니티 앱 제작
React Native를 사용한
 초간단 커뮤니티 앱 제작React Native를 사용한
 초간단 커뮤니티 앱 제작
React Native를 사용한
 초간단 커뮤니티 앱 제작
Taegon Kim
 
텐서플로 걸음마 (TensorFlow Tutorial)
텐서플로 걸음마 (TensorFlow Tutorial)텐서플로 걸음마 (TensorFlow Tutorial)
텐서플로 걸음마 (TensorFlow Tutorial)
Taejun Kim
 
딥러닝과 강화 학습으로 나보다 잘하는 쿠키런 AI 구현하기 DEVIEW 2016
딥러닝과 강화 학습으로 나보다 잘하는 쿠키런 AI 구현하기 DEVIEW 2016딥러닝과 강화 학습으로 나보다 잘하는 쿠키런 AI 구현하기 DEVIEW 2016
딥러닝과 강화 학습으로 나보다 잘하는 쿠키런 AI 구현하기 DEVIEW 2016
Taehoon Kim
 
텐서플로우 기초 이해하기
텐서플로우 기초 이해하기 텐서플로우 기초 이해하기
텐서플로우 기초 이해하기
Yong Joon Moon
 
초급 개발자 탈출
초급 개발자 탈출초급 개발자 탈출
초급 개발자 탈출
JeongHun Byeon
 
양성봉 - 알기쉬운 알고리즘 - 1장알고리즘의첫걸음
양성봉 - 알기쉬운 알고리즘 - 1장알고리즘의첫걸음양성봉 - 알기쉬운 알고리즘 - 1장알고리즘의첫걸음
양성봉 - 알기쉬운 알고리즘 - 1장알고리즘의첫걸음
Dongseo University
 
지적 대화를 위한 깊고 넓은 딥러닝 PyCon APAC 2016
지적 대화를 위한 깊고 넓은 딥러닝 PyCon APAC 2016지적 대화를 위한 깊고 넓은 딥러닝 PyCon APAC 2016
지적 대화를 위한 깊고 넓은 딥러닝 PyCon APAC 2016
Taehoon Kim
 
게임 프로그래밍 기초 공부법
게임 프로그래밍 기초 공부법게임 프로그래밍 기초 공부법
게임 프로그래밍 기초 공부법
Chris Ohk
 
손코딩뇌컴파일눈디버깅을 소개합니다.
손코딩뇌컴파일눈디버깅을 소개합니다.손코딩뇌컴파일눈디버깅을 소개합니다.
손코딩뇌컴파일눈디버깅을 소개합니다.
Kwangsung Ha
 

Viewers also liked (12)

스쿱미디어 회사 소개서 (150820) 외부용
스쿱미디어 회사 소개서 (150820) 외부용스쿱미디어 회사 소개서 (150820) 외부용
스쿱미디어 회사 소개서 (150820) 외부용
 
[소프트웨어교육] 알고리즘 교사 연수 자료
[소프트웨어교육] 알고리즘 교사 연수 자료[소프트웨어교육] 알고리즘 교사 연수 자료
[소프트웨어교육] 알고리즘 교사 연수 자료
 
Front-End 개발의 괜찮은 선택 ES6 & React
Front-End 개발의 괜찮은 선택  ES6 & ReactFront-End 개발의 괜찮은 선택  ES6 & React
Front-End 개발의 괜찮은 선택 ES6 & React
 
React Native를 사용한
 초간단 커뮤니티 앱 제작
React Native를 사용한
 초간단 커뮤니티 앱 제작React Native를 사용한
 초간단 커뮤니티 앱 제작
React Native를 사용한
 초간단 커뮤니티 앱 제작
 
텐서플로 걸음마 (TensorFlow Tutorial)
텐서플로 걸음마 (TensorFlow Tutorial)텐서플로 걸음마 (TensorFlow Tutorial)
텐서플로 걸음마 (TensorFlow Tutorial)
 
딥러닝과 강화 학습으로 나보다 잘하는 쿠키런 AI 구현하기 DEVIEW 2016
딥러닝과 강화 학습으로 나보다 잘하는 쿠키런 AI 구현하기 DEVIEW 2016딥러닝과 강화 학습으로 나보다 잘하는 쿠키런 AI 구현하기 DEVIEW 2016
딥러닝과 강화 학습으로 나보다 잘하는 쿠키런 AI 구현하기 DEVIEW 2016
 
텐서플로우 기초 이해하기
텐서플로우 기초 이해하기 텐서플로우 기초 이해하기
텐서플로우 기초 이해하기
 
초급 개발자 탈출
초급 개발자 탈출초급 개발자 탈출
초급 개발자 탈출
 
양성봉 - 알기쉬운 알고리즘 - 1장알고리즘의첫걸음
양성봉 - 알기쉬운 알고리즘 - 1장알고리즘의첫걸음양성봉 - 알기쉬운 알고리즘 - 1장알고리즘의첫걸음
양성봉 - 알기쉬운 알고리즘 - 1장알고리즘의첫걸음
 
지적 대화를 위한 깊고 넓은 딥러닝 PyCon APAC 2016
지적 대화를 위한 깊고 넓은 딥러닝 PyCon APAC 2016지적 대화를 위한 깊고 넓은 딥러닝 PyCon APAC 2016
지적 대화를 위한 깊고 넓은 딥러닝 PyCon APAC 2016
 
게임 프로그래밍 기초 공부법
게임 프로그래밍 기초 공부법게임 프로그래밍 기초 공부법
게임 프로그래밍 기초 공부법
 
손코딩뇌컴파일눈디버깅을 소개합니다.
손코딩뇌컴파일눈디버깅을 소개합니다.손코딩뇌컴파일눈디버깅을 소개합니다.
손코딩뇌컴파일눈디버깅을 소개합니다.
 

More from SKOOPMEDIA

조승연 - 개발자의 생존 수학
조승연 - 개발자의 생존 수학조승연 - 개발자의 생존 수학
조승연 - 개발자의 생존 수학
SKOOPMEDIA
 
정준호 - 기생충은 긁지 않은 복권이에요
정준호 - 기생충은 긁지 않은 복권이에요정준호 - 기생충은 긁지 않은 복권이에요
정준호 - 기생충은 긁지 않은 복권이에요
SKOOPMEDIA
 
이준행 - 일간워스트 커뮤니티 공격 유입 사례 소개
이준행 - 일간워스트 커뮤니티 공격 유입 사례 소개이준행 - 일간워스트 커뮤니티 공격 유입 사례 소개
이준행 - 일간워스트 커뮤니티 공격 유입 사례 소개
SKOOPMEDIA
 
정동현 - 고기를 잘 굽는 법
정동현 - 고기를 잘 굽는 법정동현 - 고기를 잘 굽는 법
정동현 - 고기를 잘 굽는 법
SKOOPMEDIA
 
주영준 - 사람 말고 술을 마십시다.
주영준 - 사람 말고 술을 마십시다.주영준 - 사람 말고 술을 마십시다.
주영준 - 사람 말고 술을 마십시다.
SKOOPMEDIA
 
리라쨩 - 2ch와 리라하우스
리라쨩 - 2ch와 리라하우스리라쨩 - 2ch와 리라하우스
리라쨩 - 2ch와 리라하우스
SKOOPMEDIA
 
김용하 - 아프니까 지름이다
김용하 - 아프니까 지름이다김용하 - 아프니까 지름이다
김용하 - 아프니까 지름이다
SKOOPMEDIA
 

More from SKOOPMEDIA (7)

조승연 - 개발자의 생존 수학
조승연 - 개발자의 생존 수학조승연 - 개발자의 생존 수학
조승연 - 개발자의 생존 수학
 
정준호 - 기생충은 긁지 않은 복권이에요
정준호 - 기생충은 긁지 않은 복권이에요정준호 - 기생충은 긁지 않은 복권이에요
정준호 - 기생충은 긁지 않은 복권이에요
 
이준행 - 일간워스트 커뮤니티 공격 유입 사례 소개
이준행 - 일간워스트 커뮤니티 공격 유입 사례 소개이준행 - 일간워스트 커뮤니티 공격 유입 사례 소개
이준행 - 일간워스트 커뮤니티 공격 유입 사례 소개
 
정동현 - 고기를 잘 굽는 법
정동현 - 고기를 잘 굽는 법정동현 - 고기를 잘 굽는 법
정동현 - 고기를 잘 굽는 법
 
주영준 - 사람 말고 술을 마십시다.
주영준 - 사람 말고 술을 마십시다.주영준 - 사람 말고 술을 마십시다.
주영준 - 사람 말고 술을 마십시다.
 
리라쨩 - 2ch와 리라하우스
리라쨩 - 2ch와 리라하우스리라쨩 - 2ch와 리라하우스
리라쨩 - 2ch와 리라하우스
 
김용하 - 아프니까 지름이다
김용하 - 아프니까 지름이다김용하 - 아프니까 지름이다
김용하 - 아프니까 지름이다
 

구종만 - 알고리즘: 기술 사회의 연금술

  • 1.
  • 3. 구종만 • 각종 프로그래밍 대회 (옛날~) ! • http://algospot.com (’07~) ! • 알고리즘 문제 해결 전략 (’11) ! • DRW Trading Group (~’09) ! • GETCO (~’13)
  • 4. Algorithms: 기술 사회의 연금술 @jongman
  • 5. 인물 스무고개 ! (현실 인물, 만화/소설 등장인물)
  • 6.
  • 8.
  • 13. “충분히 진보된 기술은 마법과 구분되지 않는다.” ! - Arthur C. Clarke
  • 15.
  • 19. 모르는 자에겐 마법이지만 ! 아는 자에겐 예술일 뿐!
  • 20. 큰 그림은 알 수 있다! “검색 엔진? 역색인 만들어서 검색하고, 용량 많 으니 분산 처리 잘 하고, 스팸 걸러내기랑 랭킹 신경 잘 써야지.” “얼굴 인식? 얼굴 윤곽 인식하고, 눈코입 크기랑 위치 사용해서 분류하면 되지.”
  • 21. 전산학이 현대의 마법이라면 ! 알고리즘은 그 기초
  • 23. 재미 없는 정의 • 약간은 모호한 정의: • “컴퓨터가 주어진 작업을 수행하는 방법” • 소스 코드 != 알고리즘
  • 24. 예제 문제 - 정렬 [6,6,6,8,5,8,7,6,6,7,3] ! 을 정렬하면 ! [3,5,6,6,6,6,6,7,7,8,8]
  • 26.
  • 27.
  • 28. 한 문제를 여러 방법으로 풀 수 있어요
  • 30. 사실 입력은 LG 순위! [6, 6, 6, 8, 5, 8, 7, 6, 6, 7, 3]
  • 31. 빈도 수를 세자 [6, 6, 6, 8, 5, 8, 7, 6, 6, 7, 3] {3: 1, 5: 1, 6: 5, 7: 2, 8: 2}
  • 32. 정렬 결과 복구! [6, 6, 6, 8, 5, 8, 7, 6, 6, 7, 3] {3: 1, 5: 1, 6: 5, 7: 2, 8: 2} [3, 5, 6, 6, 6, 6, 6, 7, 7, 8, 8]
  • 33.
  • 38. 가장 돈을 많이 번 구간을 찾아보자!
  • 39. 다 해본다! …. …. …. …. …. ….
  • 40.
  • 42. 성능 측정 입력 크기 simple() 1천 0.17초
  • 43. 성능 측정 입력 크기 simple() 1천 0.17초 1만 16초
  • 44. 성능 측정 입력 크기 simple() 1천 0.17초 1만 16초 10만 1568초
  • 45. 성능 측정 입력 크기 simple() 1천 0.17초 1만 16초 10만 1568초 100만 (약) 43시간 1000만 (약) 181일
  • 46.
  • 48. 반으로 쪼개자! 정답 구간은: = + • 왼쪽 절반에 있거나, 오른쪽 절반에 있거나 • 왼쪽에서 시작 - 오른쪽에서 끝
  • 50.
  • 51. 성능 측정 입력 크기 simple() divide…() 1천 0.17초 0.002초 1만 16초 0.02초 10만 1568초 0.2초 100만 (약) 43시간 3초 1000만 (약) 181일 27초
  • 56.
  • 57. 성능 측정 입력 크기 simple() divide…() fast() 1천 0.17초 0.002초 0.000008초 1만 16초 0.02초 0.008초 10만 1568초 0.2초 0.08초 100만 (약) 43시간 3초 0.8초 1000만 (약) 181일 27초 8초
  • 58. 교훈 • 같은 문제를 푸는 여러 방법들 간에 큰 성능 차 이가 있다! • 입력이 커지면 커질 수록 알고리즘간의 성능 차 이는 커진다!
  • 59. 아까 보여준거랑 너무 차이나는데요?
  • 60. 천릿길도 한 걸음부터 • 간단한 알고리즘은 어려운 알고리즘의 구성 요 소가 된다 • 많은 알고리즘은 설계 “기법” 혹은 “원칙”들을 공유한다 • Akinator와 리사이징도 알고 보면 간단!
  • 62. 표로 만들어 보기 여자?         30세 이상?         정치인?         미국인?        
  • 63. 첫 번째 질문? 여자?         30세 이상?         정치인?         미국인?        
  • 64. 첫 번째 질문? 여자?         30세 이상?         정치인?         미국인?        
  • 65. 두 번째 질문? 여자?         30세 이상?         정치인?         미국인?        
  • 66. 두 번째 질문? 여자?         30세 이상?         정치인?         미국인?        
  • 67. 새 정보 받아들이기 여자?         30세 이상?         정치인?         미국인?        
  • 68. “이 둘을 어떻게 구분하나요?” 여자?         30세 이상?         정치인?         미국인?        
  • 69. 사용자 입력 여자?         30세 이상?         정치인?         미국인?         가수?  
  • 70. 부분적 정보에서 배우기 여자?         30세 이상?         정치인?         미국인?         가수?  
  • 71. 괜히 한번 물어보기 여자?         30세 이상?         정치인?         미국인?         가수?  
  • 72. 괜히 한번 물어보기 여자?         30세 이상?         정치인?         미국인?         가수?  
  • 73. 결과가 이랬다면 여자?         30세 이상?         정치인?         미국인?         가수?  
  • 74. 아하! 여자?         30세 이상?         정치인?         미국인?         가수?   
  • 75. 불확실성 해결하기 • “김정은은 정치인인가요?” • “엘사는 정치인인가요?” • “김정은이 작년에 30살이 되었어요!” • “잘생겼습니까?”
  • 76. 모든 것을 확률로 여자? 100% 100% 0% 0% 100% 100% 100% 100% 30세 이상? 0% 100% 100% 80% 90% 0% 100% 0% 정치인? 0% 100% 100% 100% 0% 0% 0% 70% 미국인? 0% 0% 100% 0% 100% 20% 100% 10%
  • 84. 1 2 2 2 1 0 2 2 0 4 4 0 1 1 0 0 1 2 3 1 1 0 3 1 1 1 0 0 0 1 0 1 2 3 2 0 2 2 0 5 4 1 1 1 0 0 1 2 3 0 1 0 2 0 1 0 0 0 0 0 1 1 1 3 3 0 2 2 1 4 3 1 2 1 0 0 0 3 4 1 1 0 1 1 0 0 0 0 0 0 1 1 1 4 4 0 1 1 1 4 2 0 2 2 0 1 0 2 4 1 1 1 1 1 0 1 0 0 0 0 1 1 1 3 4 1 0 1 1 3 2 0 2 2 0 1 1 2 4 2 2 2 1 1 1 1 0 0 0 1 1 1 1 2 3 1 1 0 1 3 2 0 1 1 0 0 1 1 4 2 2 2 0 1 2 1 1 1 1 1 1 1 1 2 2 1 1 1 2 3 1 1 1 1 0 0 1 0 4 2 3 1 0 2 2 0 1 0 0 0 1 1 1 2 2 0 1 0 3 3 1 0 1 0 0 0 1 0 4 2 3 1 0 2 2 0 1 0 0 0 1 0 1 2 2 1 0 0 2 2 1 0 0 0 0 0 2 1 4 2 3 0 1 2 1 0 0 0 0 0 1 1 1 2 1 1 0 1 2 2 1 0 0 0 1 0 2 1 3 1 3 0 2 2 0 0 0 0 0 0 1 1 1 2 1 1 0 1 2 1 1 0 0 0 1 1 2 0 2 1 2 0 3 2 1 1 0 0 0 1 1 1 1 2 1 0 0 1 1 1 1 0 0 0 0 1 2 0 2 1 2 0 3 1 1 1 0 0 1 1 1 1 2 2 1 0 0 1 1 1 1 0 0 0 0 1 2 0 3 1 2 0 2 1 1 2 0 0 1 1 1 1 2 2 1 0 0 1 0 1 1 0 0 0 0 2 2 0 3 1 2 0 2 1 0 1 0 0 1 0 1 1 1 2 1 0 0 1 0 1 1 0 0 0 0 1 2 0 3 1 2 0 1 1 0 1 0 0 0 1 1 1 1 1 1 0 1 1 0 1 1 1 0 1 1 1 1 0 3 2 2 0 1 0 0 0 1 0 0 1 1 2 2 1 1 0 0 0 0 0 1 1 0 0 0 1 1 0 3 2 2 0 0 1 1 0 1 0 1 0 1 2 1 1 1 0 0 0 0 0 1 1 1 0 0 1 1 0 3 2 1 0 0 0 1 0 2 0 1 0 1 2 1 1 1 0 0 0 0 0 0 1 0 0 0 2 1 0 3 2 1 1 0 0 1 0 1 0 1 0 1 1 1 1 0 0 0 0 0 0 0 1 0 0 0 2 1 1 3 3 1 2 0 0 0 0 1 0 1 0 1 0 1 2 0 0 1 0 0 1 1 2 1 0 0 2 1 1 3 3 2 2 0 0 0 0 1 0 1 0 2 1 1 2 1 1 1 1 0 0 1 2 2 1 0 3 1 1 2 1 2 1 0 0 0 0 1 0 1 0 1 1 1 2 1 1 1 1 1 1 0 1 2 2 0 2 1 0 2 1 1 1 0 0 0 1 0 1 1 0 1 1 0 1 0 0 1 1 2 1 0 0 2 2 0 2 2 1 2 1 1 1 0 0 0 1 0 0 1 1 1 1 0 1 0 0 0 2 2 2 1 0 2 2 0 2 2 1 1 1 1 1 0 0 1 1 0 0 0 1 1 1 0 1 1 1 0 1 2 2 1 0 1 2 0 2 2 0 0 0 1 1 0 1 1 2 0 0 0 2 1 1 0 1 1 0 0 1 2 3 2 0 1 2 0 1 2 1 0 0 1 1 0 1 2 2 0 0 1 1 0 1 1 0 0 0 0 0 1 2 2 1 0 1 0 1 1 2 1 1 2 1 1 1 3 2 1 0 0 1 0 1 1 0 0 0 0 0 1 2 1 1 0 0 0 0 0 1 2 0 3 1 1 0 3 1 1 0 0 0
  • 85. 1 2 2 2 1 0 2 2 0 4 4 0 1 1 0 0 1 2 3 1 1 0 3 1 1 1 0 0 0 1 0 1 2 3 2 0 2 2 0 5 4 1 1 1 0 0 1 2 3 0 1 0 2 0 1 0 0 0 0 0 1 1 1 3 3 0 2 2 1 4 3 1 2 1 0 0 0 3 4 1 1 0 1 1 0 0 0 0 0 0 1 1 1 4 4 0 1 1 1 4 2 0 2 2 0 1 0 2 4 1 1 1 1 1 0 1 0 0 0 0 1 1 1 3 4 1 0 1 1 3 2 0 2 2 0 1 1 2 4 2 2 2 1 1 1 1 0 0 0 1 1 1 1 2 3 1 1 0 1 3 2 0 1 1 0 0 1 1 4 2 2 2 0 1 2 1 1 1 1 1 1 1 1 2 2 1 1 1 2 3 1 1 1 1 0 0 1 0 4 2 3 1 0 2 2 0 1 0 0 0 1 1 1 2 2 0 1 0 3 3 1 0 1 0 0 0 1 0 4 2 3 1 0 2 2 0 1 0 0 0 1 0 1 2 2 1 0 0 2 2 1 0 0 0 0 0 2 1 4 2 3 0 1 2 1 0 0 0 0 0 1 1 1 2 1 1 0 1 2 2 1 0 0 0 1 0 2 1 3 1 3 0 2 2 0 0 0 0 0 0 1 1 1 2 1 1 0 1 2 1 1 0 0 0 1 1 2 0 2 1 2 0 3 2 1 1 0 0 0 1 1 1 1 2 1 0 0 1 1 1 1 0 0 0 0 1 2 0 2 1 2 0 3 1 1 1 0 0 1 1 1 1 2 2 1 0 0 1 1 1 1 0 0 0 0 1 2 0 3 1 2 0 2 1 1 2 0 0 1 1 1 1 2 2 1 0 0 1 0 1 1 0 0 0 0 2 2 0 3 1 2 0 2 1 0 1 0 0 1 0 1 1 1 2 1 0 0 1 0 1 1 0 0 0 0 1 2 0 3 1 2 0 1 1 0 1 0 0 0 1 1 1 1 1 1 0 1 1 0 1 1 1 0 1 1 1 1 0 3 2 2 0 1 0 0 0 1 0 0 1 1 2 2 1 1 0 0 0 0 0 1 1 0 0 0 1 1 0 3 2 2 0 0 1 1 0 1 0 1 0 1 2 1 1 1 0 0 0 0 0 1 1 1 0 0 1 1 0 3 2 1 0 0 0 1 0 2 0 1 0 1 2 1 1 1 0 0 0 0 0 0 1 0 0 0 2 1 0 3 2 1 1 0 0 1 0 1 0 1 0 1 1 1 1 0 0 0 0 0 0 0 1 0 0 0 2 1 1 3 3 1 2 0 0 0 0 1 0 1 0 1 0 1 2 0 0 1 0 0 1 1 2 1 0 0 2 1 1 3 3 2 2 0 0 0 0 1 0 1 0 2 1 1 2 1 1 1 1 0 0 1 2 2 1 0 3 1 1 2 1 2 1 0 0 0 0 1 0 1 0 1 1 1 2 1 1 1 1 1 1 0 1 2 2 0 2 1 0 2 1 1 1 0 0 0 1 0 1 1 0 1 1 0 1 0 0 1 1 2 1 0 0 2 2 0 2 2 1 2 1 1 1 0 0 0 1 0 0 1 1 1 1 0 1 0 0 0 2 2 2 1 0 2 2 0 2 2 1 1 1 1 1 0 0 1 1 0 0 0 1 1 1 0 1 1 1 0 1 2 2 1 0 1 2 0 2 2 0 0 0 1 1 0 1 1 2 0 0 0 2 1 1 0 1 1 0 0 1 2 3 2 0 1 2 0 1 2 1 0 0 1 1 0 1 2 2 0 0 1 1 0 1 1 0 0 0 0 0 1 2 2 1 0 1 0 1 1 2 1 1 2 1 1 1 3 2 1 0 0 1 0 1 1 0 0 0 0 0 1 2 1 1 0 0 0 0 0 1 2 0 3 1 1 0 3 1 1 0 0 0
  • 86. 천릿길도 한 걸음부터 #2 • 이미지 높이가 한 줄이라고 생각해 봅시다 2 2 1 0 0 2 2 1 0 0 0 2 1 1 0 1 2 2 1 0 0 0 2 1 1 0 1 2 1 1 0 0 0 2 1 0 0 1 1 1 1 0 0 0 ….
  • 87. 천릿길도 한 걸음부터 #2 • 생각할 것도 없네 2 2 1 0 0 2 2 1 0 0 0 2 1 1 0 1 2 2 1 0 0 0 2 1 1 0 1 2 1 1 0 0 0 2 1 0 0 1 1 1 1 0 0 0 ….
  • 88. 천릿길도 두 걸음부터 • 이미지가 두 줄이라고 생각해 봅시다 2 2 1 0 0 2 2 1 0 0 0 2 1 1 0 1 2 2 1 0 0 0 2 1 1 0 1 2 1 1 0 0 0 2 1 0 0 1 1 1 1 0 0 0 ….
  • 89. 천릿길도 1.1 걸음부터 • 두 번째 줄의 한 칸만 생각해 봅시다 2 2 1 0 0 2 2 1 0 0 0 2 1 1 0 1 2 2 1 0 0 0 2 1 1 0 1 2 1 1 0 0 0 2 1 0 0 1 1 1 1 0 0 0 ….
  • 90. 천릿길도 1.1 걸음부터 • 여기까지 내려오는 가장 짧은 경로는? 2 2 1 0 0 2 2 1 0 0 0 2 1 1 0 1 2 2 1 0 0 0 2 1 1 0 1 2 1 1 0 0 0 2 1 0 0 1 1 1 1 0 0 0 ….
  • 91. 천릿길도 1.1 걸음부터 • 최소 합은 1이구나! 2 2 1 0 0 2 2 1 0 0 0 2 1 1 0 1 2 2 1 0 0 0 2 1 1 0 1 2 1 1 0 0 0 2 1 0 0 1 1 1 1 0 0 0 ….
  • 92. 이제 2 걸음 • 모든 칸에 대해 최소 합을 갱신 2 2 1 0 0 2 2 1 0 0 0 4 2 1 0 1 2 3 1 0 0 0 2 1 1 0 1 2 1 1 0 0 0 2 1 0 0 1 1 1 1 0 0 0 ….
  • 93. 2.1 걸음 • 빨간 칸까지 내려오는 가장 작은 경로 합은? 2 2 1 0 0 2 2 1 0 0 0 4 2 1 0 1 2 3 1 0 0 0 2 1 1 0 1 2 1 1 0 0 0 2 1 0 0 1 1 1 1 0 0 0 ….
  • 94. 네 3입니다! • 이렇게 반복하면 최단 경로를 찾을 수 있어요 2 2 1 0 0 2 2 1 0 0 0 4 2 1 0 1 2 3 1 0 0 0 2 1 1 0 1 3 1 1 0 0 0 2 1 0 0 1 1 1 1 0 0 0 ….
  • 97. 세상을 바꾸는 힘 • 좋은 식견을 갖춘 개발자의 중요 요건 • 밖에서 보면 놀라워도 • 직접 해 보면 비교적 쉽다 • 재미나게 공부해서 더 좋은 개발자가 되자!