3.7, 3.8 코어.
J님이 과자를 나눠주셨다! 짱!
G님이 프로시저를
함수처럼 이해했던 게 편하셨다고 설명.
그리고
제어권 전달, 데이터 이동, 메모리 지역 저장소 할당과 반납에 대해 언급,
제어권은 call과 ret으로 진행되고,
인자가 6개 이상 넘으면
그 이상의 값은
다른 함수에게 넘겨줄 때 스택에 저장되는 것과,
(데이터 이동)
리턴하는 것,
그리고 또 스택에 지역 저장소가 할당되는것...
에 대해 말씀하시다가
argument가 return address에 저장된 예시 그림에서
왜 이렇게 되는 건지 궁금해하셔서
아마 인자를 넘겨주기 전에
retunr addr아래에 저장하는데,
값 x1, x2, x3, x4를 데이터 크기별로 채우고,
포인터 주소는 혼자 8바이트라 한칸 차지하고,
스택 포인터는 별개로 용량이 작아도 한줄을 차지한다..
(argument랑 별개로 저장된다.)
...
가 아닌가 말씀 드렸음.
그 뒤로
saved register 때문에
스택과 레지스터의 구분을 헷갈려하셨는데
아마 register...의 주소를 저장해서
그런 명칭이지, 스택과 레지스터는 별개인 것 같다...
...
라든가.
아무튼,
그 뒤의 J님이 깔끔하게
3.8에 대해 설명.
컴퓨터는....
사실 [1][2]등으로 지정을 해주어도 그걸 알아듣는게 아니기때문에
실제로 어떻게 알아듣느냐, 그 중간의 이해과정을 아는 것에 가깝다며,
예를 들어 우리는 [0,0][0,0] 등으로 열이 다르면 나누어 인식하지만
컴퓨터는 1차원 배열로 인식하되 [0,0,0,0] n칸을 움직이면 그 위치구나
하는 것.
무엇보다
어느 방에 가라 (x)
몇 걸음 앞으로 가라(o)
에 가깝다는 말이 인상깊었음.
그래서 그런 연산이 가능하다는 사실...
을 이해하는 게 중요한 것 같았고,
예전에는 c에서 input(n)을 바로 해주기 전에,
arr 자체에 크기를 할당해줘야 arr[n]이 가능했기때문에
malloc이나 free를 써서
(memory allocation...즉, 메모리 할당.)
전자로 할당, 뒤는 가변만큼 할당하는 함수를 써야했는데
지금은 그부분 최적화되었음...같은.
그래서 이번 파트는 그런 내용이다...
같은.
그리고 3.9에서 나온 게
이전에 설명했던 구조체가 나오는데
그게 저번에 얘기했던
structure, 그러니까
자기가 임의의 원하는 데이터타입들을 할당하면
그게 그대로 새로운 데이터 타입이 되는 걸 얘기한다고 함.
내가 마지막으로
음... 뭐...
argument build area랑 local variable이 헷갈렸던 얘기랑
배열 참조를 포인터 참조로 역변환하는게 어째서 최적화인지...
에 대해 하고
총 정리 코어는 해보고 하고 싶으면 하고
안 해도 괜찮고
문제 풀이는...
전체적인 로직을 솔루션 보기전에 맞는지
확인하는 정도로 물어보는 건 좋지만
구체적인 코드의 어느 부분이 틀렸는지 물어보는건
해독하기도 어렵고 시간이 오래 걸리는 거라
아예 자기가 다 푼 코드를 설명하는게 아니면
비효율적이지 않을까 권유해주셔서
동의하고 문제 풀이는 뭐...
일단 해보고 그 자리에서 푼 다른 사람에게 물어보거나
원하면 코어 제안하고 하기로 했다!
LCS, 플로이드 워셜 알고리즘.
다른 팀의 코어를 같이 들었다.
M님이 LCS와 플로이드 워셜 알고리즘 키워드로 설명해주셨다.
LCS에서 일치하면 부분 수열의 길이가 증가하는 건 알고 있었는데,
AB와 GBC의 최장 공통 부분 수열이
A와 GBC의 최장 공통 부분수열과
AB와 GB의 최장 공통 부분 수열....
이라는 말이 잘 이해가 안 가지만
아무튼 코드는 이해가 가니까 넘겼었는데,
GBCDFE와 ABCDEF를 행과 열로 나열한다고 했을때
그러니까...
x 0 A B C D E F
0 0 0 0 0 0 0
G 0 (여기)
B 0
C 0
D 0
F 0
E 0
가 정확히 무슨 칸이냐면
Lmax('G' 'A')...
...
아 우리가 하는게
L max ('GBCDFE', 'ABCDEF')라면 이건
세가지 경우로 나뉜다는 것이다
중 가장 큰 하나를 고른다는 것이다.
그렇다! 저 말은
마지막 두 가지 경우를 비교한 걸 말한 것이다.
그래서 일치하지 않으면 위와 아래에서 비교해서 큰값을,
일치하면 셋다 비교해서 큰 값을 가져왔던 것이다...
......
그리고 플로이드 워셜은
2차원 배열로 갱신해나가는 건 알고 있었지만
새로 갱신되는,
즉 최단거리가 갱신되는 배열의 뜻을
정말 그만큼의 거리를 가진 간선이 생겼다고
가정해도 문제가 없다.....
라고 그래프로 그려가면서 설명하셔서
신기했다....
...
코드 쓸...줄 알던가 내가?
쩝....
아는 거긴한데 복습..내일 아침에 하지뭐
그리고
간단히 CS하고
(&E[i] -E 가 자료형이 long이 되고 4i가 아니라 i가 되는 이유가
어셈블리 코드 자체가 그 ....렇다는 걸 알았음)
연습 문제도 웬만해서 풀어보셨대서 놀랐다...
하나도 안 풀었지만...
... 뭐...아무튼!
끝!