SlideShare une entreprise Scribd logo
1  sur  108
OF KITEL
BY KITEL
FOR KITEL
S/W 능력 향상을 위한 Algorithm 세미나
37th 김진오
목차
• Why Algorithm? //왜 부른거야
• Standard Input & Output //scanf는 Cin보다 강하다.
• 기초수학 //초등학교로 돌아갑시다.
• 문자열 //귀찮다고 무시했죠?
• 재귀!! Recursive!!! 재귀!!!! //미쳤나..
Why Algorithm?
• 삼성, LG, SK, KT, 제니퍼 소프트 외국 기업들
//삼성은 알고리즘에 눈이 멀었다.
• 대학원도 알고리즘 시험이 기본
• 알파고 이놈!
• 코드 양을 줄여라!
Standard Input&Output
• scanf는 Cin보다 강하다!
• 가장 큰 차이: 속도. //알고리즘은 시간싸움이
다.
• ..? 불편하잖아요!
scanf는 Cin보다 빠르다
• 와 같은 관계
• 작은 입력에는 차이가 없지만 큰 입력에는 속수무책
scanf는 Cin보다 빠르다
scanf는 Cin보다 불편하잖아
요!
• 사실 공채시험에서는 Cin을 쓰던, scanf를 쓰던 다
풀 수 있도록 충분한 런타임을 제공한다.
• 공부는 불편하게 해야죠
• 편하게 백수 될래요?
scanf(“ %d”,&KITEL);
• 차이는?
• “%d”와 “ %d” 공백 하나.
• 그래서 차이는?
• 입력을 받을 줄 아는구나!
scanf
• scanf(“n%d”,&KITEL);
New line character 무시.
• scanf(“ %d”,&KITEL);
공백 무시. (New line character 포함)
• scanf(“abc %d”,&KITEL);
abc 무시
사실 무시가 아니고 입력을 받고 어디에도 저장을 안
함.
알고리즘 문제푸는데 엄청나게 유용한 팁.
여러개 입력받기
• 2차원 배열을 써야하는 경우에 한 줄에 두 개의 정수
가 들어오는 경우가 많다.
• scanf("%d %d",&A, &B);
버퍼처리?
• 버퍼처리란?
숫자를 입력받고 문자를 입력받을 때 씹히는 현상.
숫자를 입력하고 누르는 엔터(New line character)때
문.
• Cin쓰면 버퍼 신경 안써도 되잖아요.
• !!
• scanf(“n%c”,&character);
안받아요.
기초수학
• 저 공돌인데요?
• 미안 내가 수학이 약해서..
Why Mathematics?
• 코딩에서 수학이란?
• 코드의 양을 줄이자!
• 알고리즘은 물 흐르듯 흘러가야..
초등학교
• 최대공약수
• 최소공배수
GCD, LCM
• Greatest Common Divisor 최대공약수
• Lowest Common Multiple 최소공배수
종종 문제풀이에 키가 되는 녀석들
GCD(12,4)
• 12 4
• 8 4
• 4 4
• 12 - 4 = 8
• 8 - 4 = 4
• GCD(12,4) == 4
두 수가 같아질때 까지.
GCD(6,16)
• 6 16
• 6 10
• 6 4
• 2 4
• 2 2
• |6 - 16| = 10
• |6 - 10| = 4
• 6 - 4 = 2
• |2 - 4| =2
• GCD(6,16) == 2
두 수 중에 큰 녀석의 값을 두 값의 절대값 차이와 바꾼다.
GCD - CODE
int gcd(int parm_a, int parm_b){
if(parm_a*parm_b == 0){
return 0;
}
while(parm_a != parm_b){
if(parm_a > parm_b){
parm_a = parm_a - parm_b;
}
else{
parm_b = parm_b - parm_a;
}
}
return parm_a;
}
GCD - CODE
int gcd(int parm_a, int parm_b){
return b ? gcd(parm_b,parm_a%parm_b) : parm_b;
}
삼항연산자
• Format
Variable = (Condition) ? (return A) : (return B);
• if(condition){ //이거랑 똑같다.
Variable=A;
}
else{
Variable=B;
}
• ex)
SangHyeok = Handsome ? Yes : No;
• ex) 임시 변수와 최대값을 비교하여 최대값 갱신하기.
MAX = MAX > temp ? MAX : temp;
LCM
• LCM = A*B/GCD
중학교
• 시간 = 거리 / 속력
여왕벌 문제
X m/s
L
여왕벌 문제
• 날아간 시간 ==
• 시간 * 속력 = 거리
고등학교
• 구분구적법
원의 넓이 구하기
원의 넓이 구하기 -
CODE
대학교
• 제곱근 없이 제곱근 문제 풀기
제곱근 구하기
• sqrt 함수 쓰면 되잖아요!
• 나가세요..
• 공부는 불편하게.
Newton-Raphson
• 처음보는데?
• 공학수학에 나와요..
• 근사값 구하는 방법 알아두면 좋다.
• https://en.wikipedia.org/wiki/Newton%27s_method
Newton-Raphson
Newton-Raphson -
CODE
축! 졸업!
문자열
• 수학하니깐 지겨워서요
• 쉽잖아요
• ?
• 에이 설마 못 풀까봐?
• 그래도 다시 한 번
Why String?
• 보통 대기업..은 모르겠고 삼성 공채 기준은
searching 능력.
• Searching 문제에 종종 짬뽕돼서 나오는 문자열.
• 쉽다고?
• 입력 받는데만 한 세월.
필수적인 함수들
• int strlen(char* parm_str);
문자열의 길이 리턴
• char* strcpy(char* dest, char* copy);
copy할 문자열을 dest에 복사
• char* strncpy(char*, char* copy, int num);
copy 문자열의 시작부터 n개의 문자를 dest에 복사.
• int sprintf(char* buffer, const char* format,…);
이게 진짜 꿀. (알고리즘 보다는 실제 개발할때 꿀)
ex)
char str[100]; int str_len;
str_length=sprintf(str,”KITEL %dth %s”,37,”Jinoh Kim”);
==> str_length==20, str==“KITEL 37th Jinoh Kim”
풀어보면 귀찮을 문제들
• 공부는 불편하게 해야해요. 옷차림 빼고.
• //문자열 뒤집기
http://59.23.113.171/30stair/reverse/reverse.php?pname=re
verse
• //단어별 역순
http://59.23.113.171/30stair/esrever/esrever.php?pname=es
rever
• //지뢰
http://59.23.113.171/30stair/mine/mine.php?pname=mine
• //문자 피보나치
http://59.23.113.171/30stair/fibos/fibos.php?pname=fibos
재귀!!
• 재귀!!
• 재귀!!
• 재귀!!
• 재귀!!
• 재귀!!
• 재귀!!
어쩌라고
• 어쩌라고
• 어쩌라고
• 어쩌라고
• 어쩌라고
• 어쩌라고
• 어쩌라고
Why Recursive?
• 알고리즘 시험은 시간싸움.
• 코드 간소화.
• 스택을 구현할 필요가 없다.
• 하지만 실제 개발할때 사용하면 개 발. 시스템 과부
하가 크다.
재귀
int gcd(int parm_a, int parm_b){
return b ? gcd(parm_b, parm_a%parm_b) :
parm_b;
}
아까 만났던 그 녀석
• 함수가 Call-Stack에 차곡차곡 쌓였다가 가장 늦게
들어온 녀석부터 빠져나간다.
Stack
• 가장 기초적인 Data structure
• Push, Pop
• FILO(First In Last Out)
Stack
• 가장 기초적인 Data structure
• Push, Pop
• FILO(First In Last Out)
Push
Stack
• 가장 기초적인 Data structure
• Push, Pop
• FILO(First In Last Out)
Push
Stack
• 가장 기초적인 Data structure
• Push, Pop
• FILO(First In Last Out)
Push
Stack
• 가장 기초적인 Data structure
• Push, Pop
• FILO(First In Last Out)
Pop
Stack
• 가장 기초적인 Data structure
• Push, Pop
• FILO(First In Last Out)
Pop
Stack
• 가장 기초적인 Data structure
• Push, Pop
• FILO(First In Last Out)
Pop
재귀
• 좀 더 착하게 생긴 녀석이랑 놀아보자
• int makeTen(int parm){
if(parm<10){
return makeTen(parm+1);
}
else if(parm>10){
return makeTen(parm-1);
}
else{
return parm;
}
}
printf(“%dn”,makeTen(5)); ==> 10
재귀는 이럴때 유용하다
• 좌우대칭 산모양
• 대칭!
• Back tracking. 무언가를 찾아야 할 때.
좌우대칭 산모양
• http://59.23.113.171/30stair/pTp/pTp.php?pname=p
Tp
• 재귀! 샌드위치를 잘 만들어 보세요.
• 싫으면 알아서 잘 해보세요. 김밥을 드시던가.
좌우대칭 산모양 -
CODE
N=3
CALL STACK
현재 위
치
다시 시
작
좌우대칭 산모양 -
CODE
PUSH
CALL STACK
recursive(3);
좌우대칭 산모양 -
CODE
recursive(3);
CALL STACK
3
좌우대칭 산모양 -
CODE
PUSH
recursive(3);
CALL STACK
recursive(2);
3
좌우대칭 산모양 -
CODE
CALL STACK
recursive(3);
recursive(2);
2
좌우대칭 산모양 -
CODE
PUSH
CALL STACK
recursive(3);
recursive(2);
2
recursive(1);
좌우대칭 산모양 -
CODE
CALL STACK
recursive(3);
recursive(2);
1
recursive(1);
좌우대칭 산모양 -
CODE
PUSH
CALL STACK
recursive(3);
recursive(2);
1
recursive(1);
recursive(0);
좌우대칭 산모양 -
CODE
CALL STACK
0
recursive(3);
recursive(2);
recursive(1);
recursive(0);
좌우대칭 산모양 -
CODE
CALL STACK
0
recursive(3);
recursive(2);
recursive(1);
recursive(0);
좌우대칭 산모양 -
CODE
POP
CALL STACK
recursive(3);
recursive(2);
recursive(1);
좌우대칭 산모양 -
CODE
CALL STACK
1
recursive(3);
recursive(2);
recursive(1);
좌우대칭 산모양 -
CODE
CALL STACK
1
1
recursive(3);
recursive(2);
recursive(1);
좌우대칭 산모양 -
CODE
PUSH
CALL STACK
1
1
recursive(0);
recursive(3);
recursive(2);
recursive(1);
좌우대칭 산모양 -
CODE
CALL STACK
1
0
recursive(0);
recursive(3);
recursive(2);
recursive(1);
좌우대칭 산모양 -
CODE
POP
CALL STACK
1
recursive(3);
recursive(2);
recursive(1);
좌우대칭 산모양 -
CODE
CALL STACK
1
1
recursive(3);
recursive(2);
recursive(1);
좌우대칭 산모양 -
CODE
CALL STACK
1
1
recursive(3);
recursive(2);
recursive(1);
좌우대칭 산모양 -
CODE
POP
CALL STACK
1
recursive(5);
recursive(4);
recursive(3);
recursive(2);
recursive(3);
recursive(2);
좌우대칭 산모양 -
CODE
CALL STACK
1
recursive(3);
recursive(2);
2
좌우대칭 산모양 -
CODE
CALL STACK
recursive(3);
recursive(2);
2
12
좌우대칭 산모양 -
CODE
CALL STACK
recursive(3);
recursive(2);
2
PUSH
12
recursive(1);
좌우대칭 산모양 -
CODE
CALL STACK
recursive(3);
recursive(2);
1
12
recursive(1);
좌우대칭 산모양 -
CODE
CALL STACK
recursive(3);
recursive(2);
1
12
recursive(1);
PUSH
recursive(0);
좌우대칭 산모양 -
CODE
CALL STACK
12
0
recursive(0);
recursive(3);
recursive(2);
recursive(1);
좌우대칭 산모양 -
CODE
POP
CALL STACK
12
recursive(3);
recursive(2);
recursive(1);
좌우대칭 산모양 -
CODE
CALL STACK
recursive(3);
recursive(2);
1
12
recursive(1);
좌우대칭 산모양 -
CODE
CALL STACK
recursive(3);
recursive(2);
1
121
recursive(1);
0 생략
좌우대칭 산모양 -
CODE
CALL STACK
recursive(3);
recursive(2);
121
0 생략
POP
좌우대칭 산모양 -
CODE
CALL STACK
recursive(3);
recursive(2);
2
121
좌우대칭 산모양 -
CODE
CALL STACK
recursive(3);
recursive(2);
2
121
좌우대칭 산모양 -
CODE
CALL STACK
recursive(3);
121
POP
좌우대칭 산모양 -
CODE
recursive(3);
CALL STACK
3
121
좌우대칭 산모양 -
CODE
recursive(3);
CALL STACK
3
1213
좌우대칭 산모양 -
CODE
recursive(3);
CALL STACK
3
1213
recursive(2);
PUSH
좌우대칭 산모양 -
CODE
recursive(3);
CALL STACK
2
1213
recursive(2);
좌우대칭 산모양 -
CODE
recursive(3);
CALL STACK
2
1213
recursive(2);
recursive(1);
PUSH
좌우대칭 산모양 -
CODE
recursive(3);
CALL STACK
1
1213
recursive(2);
0 생략
recursive(1);
좌우대칭 산모양 -
CODE
recursive(3);
CALL STACK
1
12131
recursive(2);
recursive(1);
0 생략
좌우대칭 산모양 -
CODE
recursive(3);
CALL STACK
1
12131
recursive(2);
recursive(1);
좌우대칭 산모양 -
CODE
recursive(3);
CALL STACK
12131
recursive(2);
POP
좌우대칭 산모양 -
CODE
recursive(3);
CALL STACK
2
12131
recursive(2);
좌우대칭 산모양 -
CODE
recursive(3);
CALL STACK
2
121312
recursive(2);
좌우대칭 산모양 -
CODE
recursive(3);
CALL STACK
1
121312
recursive(2);
recursive(1);
0 생략
좌우대칭 산모양 -
CODE
recursive(3);
CALL STACK
1
1213121
recursive(2);
recursive(1);
0 생략
좌우대칭 산모양 -
CODE
recursive(3);
CALL STACK
1
1213121
recursive(2);
recursive(1);
좌우대칭 산모양 -
CODE
recursive(3);
CALL STACK
1213121
recursive(2);
POP
좌우대칭 산모양 -
CODE
recursive(3);
CALL STACK
2
1213121
recursive(2);
좌우대칭 산모양 -
CODE
recursive(3);
CALL STACK
2
1213121
recursive(2);
좌우대칭 산모양 -
CODE
recursive(3);
CALL STACK
1213121
POP
좌우대칭 산모양 -
CODE
recursive(3);
CALL STACK
3
1213121
좌우대칭 산모양 -
CODE
recursive(3);
CALL STACK
3
1213121
좌우대칭 산모양 -
CODE
CALL STACK
1213121
POP
좌우대칭 산모양 -
CODE
1213121
좌우대칭 산모양 -
CODE
1213121
다 그렸다..
다 그렸다..
다 그렸다..
그냥 산 하나만 그려보
자
그냥 산 하나만 그려보
자

Contenu connexe

Similaire à Kitel algorithm 1

[Td 2015]녹슨 c++ 코드에 모던 c++로 기름칠하기(옥찬호)
[Td 2015]녹슨 c++ 코드에 모던 c++로 기름칠하기(옥찬호)[Td 2015]녹슨 c++ 코드에 모던 c++로 기름칠하기(옥찬호)
[Td 2015]녹슨 c++ 코드에 모던 c++로 기름칠하기(옥찬호)Sang Don Kim
 
[TechDays Korea 2015] 녹슨 C++ 코드에 모던 C++로 기름칠하기
[TechDays Korea 2015] 녹슨 C++ 코드에 모던 C++로 기름칠하기[TechDays Korea 2015] 녹슨 C++ 코드에 모던 C++로 기름칠하기
[TechDays Korea 2015] 녹슨 C++ 코드에 모던 C++로 기름칠하기Chris Ohk
 
Let's Go (golang)
Let's Go (golang)Let's Go (golang)
Let's Go (golang)상욱 송
 
Deview 2019 눈발자국
Deview 2019 눈발자국Deview 2019 눈발자국
Deview 2019 눈발자국hanbeom Park
 
PowerVR Low Level GLSL Optimisation
PowerVR Low Level GLSL Optimisation PowerVR Low Level GLSL Optimisation
PowerVR Low Level GLSL Optimisation 민웅 이
 
파이썬 데이터과학 레벨1 - 초보자를 위한 데이터분석, 데이터시각화 (2020년 이태영)
파이썬 데이터과학 레벨1 - 초보자를 위한 데이터분석, 데이터시각화 (2020년 이태영) 파이썬 데이터과학 레벨1 - 초보자를 위한 데이터분석, 데이터시각화 (2020년 이태영)
파이썬 데이터과학 레벨1 - 초보자를 위한 데이터분석, 데이터시각화 (2020년 이태영) Tae Young Lee
 
KPW2012 조금 깊이 들여다보는 정규표현식
KPW2012 조금 깊이 들여다보는 정규표현식KPW2012 조금 깊이 들여다보는 정규표현식
KPW2012 조금 깊이 들여다보는 정규표현식Raymundo
 

Similaire à Kitel algorithm 1 (8)

[Td 2015]녹슨 c++ 코드에 모던 c++로 기름칠하기(옥찬호)
[Td 2015]녹슨 c++ 코드에 모던 c++로 기름칠하기(옥찬호)[Td 2015]녹슨 c++ 코드에 모던 c++로 기름칠하기(옥찬호)
[Td 2015]녹슨 c++ 코드에 모던 c++로 기름칠하기(옥찬호)
 
[TechDays Korea 2015] 녹슨 C++ 코드에 모던 C++로 기름칠하기
[TechDays Korea 2015] 녹슨 C++ 코드에 모던 C++로 기름칠하기[TechDays Korea 2015] 녹슨 C++ 코드에 모던 C++로 기름칠하기
[TechDays Korea 2015] 녹슨 C++ 코드에 모던 C++로 기름칠하기
 
Let's Go (golang)
Let's Go (golang)Let's Go (golang)
Let's Go (golang)
 
알고리즘
알고리즘알고리즘
알고리즘
 
Deview 2019 눈발자국
Deview 2019 눈발자국Deview 2019 눈발자국
Deview 2019 눈발자국
 
PowerVR Low Level GLSL Optimisation
PowerVR Low Level GLSL Optimisation PowerVR Low Level GLSL Optimisation
PowerVR Low Level GLSL Optimisation
 
파이썬 데이터과학 레벨1 - 초보자를 위한 데이터분석, 데이터시각화 (2020년 이태영)
파이썬 데이터과학 레벨1 - 초보자를 위한 데이터분석, 데이터시각화 (2020년 이태영) 파이썬 데이터과학 레벨1 - 초보자를 위한 데이터분석, 데이터시각화 (2020년 이태영)
파이썬 데이터과학 레벨1 - 초보자를 위한 데이터분석, 데이터시각화 (2020년 이태영)
 
KPW2012 조금 깊이 들여다보는 정규표현식
KPW2012 조금 깊이 들여다보는 정규표현식KPW2012 조금 깊이 들여다보는 정규표현식
KPW2012 조금 깊이 들여다보는 정규표현식
 

Kitel algorithm 1