해결된 질문
작성
·
168
답변 1
0
안녕하세요, 강의 형식이 충규님께 잘 맞지 않는 것 같아서 안타깝습니다.
조금 더 이해하실 수 있도록 최선을 다해서 질문에 대해 답변드리도록 하겠습니다.
저는 수강생 분들 모두 합격을 기원하는 입장에서 최선을 다해서 강의를 컴팩트하게 촬영해서 올리고 있고, 그에 따른 질문들을 주시면 조금 더 자세하게 설명을 드리고 있습니다.
원래 3개의 언어를 모두 다 처음부터 끝까지 배우려면 훨씬 더 많은 시간이 필요합니다.
시험에 통과할만한 수준으로 요약을 한 강좌이니, 문법이 연결되지 않는 부분이 있으면 질문 부탁드립니다.
솔직한 피드백 감사드리며 더 보완할 부분이 있으면 얼마든지 말씀 부탁드립니다.
저도 수강생 분들께 더 도움이 되는 방향으로 수정하고 싶은 사람이니까요.
질문하신 것에 대해서 답변드리는 제 입장에서 조금 난감한 것이
영상 자체가 이미 해당 문제에 대해서 해설한 것인데
"포인터 문제 전반적인 해설 간략히"라고 하시면 어디서부터 어떻게 설명을 드려야할 지 감을 잡기 어렵습니다.
이전 질문을 올려주시는 것도 마찬가지인데, 정확히 어느 부분에서 이해가 어려운지를 대략적으로 알려주시면 좋습니다.
영상 자체에서 이미 문제를 설명했는데, 문제 전체를 다시 해설해달라는 말씀이면 거의 그대로 문장으로 써서 드리는 수밖에 없기 때문입니다.
먼저 질문 주신 문제의 전체 코드를 같이 보시죠.
#include <stdio.h>
int maxVal(int *arr, int size) {
if (size == 1) {
return arr[0];
} else {
int max = maxVal(arr, size - 1);
return (arr[size - 1] > max) ? arr[size - 1] : max;
}
}
int main() {
int myArray[] = {1, 5, 3, 9, 2};
int size = sizeof(myArray) / sizeof(myArray[0]);
printf("배열의 최대값은 %d입니다.\n", maxVal(myArray, size));
return 0;
}
출력값: 배열의 최대값은 9입니다.
지금 메인함수에서는 int myArray[] = {1, 5, 3, 9, 2}; 이 형태로 배열이 주어졌습니다.
size는 sizeof(myArray)는 20이고, sizeof(myArray[0])은 4입니다.
여기서 숫자는 모르셔도 됩니다.
다만 전체 배열의 크기를 1개의 요소로 나눈 것이니 size가 5가 된다는 것만 알면 됩니다.
(개별 int 형태의 데이터 크기는 알려드리지 않았기 때문)
이걸 그대로 maxVal(myArray, size) 이렇게 넣습니다.
maxVal에서는 *arr이라는 포인터로 myArray를 가리키겠다는 말입니다. 그래서 함수 내부에서는 포인터 변수 arr로 사용 가능합니다.
전체 코드에 대해서는 영상에서 다뤘고, 질문도 전체적으로 간략하게 말씀하셔서 요약을 해보겠습니다.
maxVal()의 동작을 요약하자면 이렇습니다.
재귀 호출이 앞쪽 4개 요소의 최댓값을 먼저 찾아 내려갑니다.
Base Case가 1을 돌려준 뒤, 각 단계에서 자기 차례 요소와 받은 최댓값을 비교합니다.
9가 등장한 깊이에서 이후 모든 비교를 이겨 최종 반환값이 됩니다.
printf가 그 값을 그대로 출력하므로 “9”가 화면에 찍히는 것입니다.
처음에 5가 주어지면 maxVal(arr, 4)를 재호출합니다.
... 이런 식으로 계속 내려가서 가장 마지막인 return arr[0]까지 진입합니다.
그 뒤로 리턴값을 돌려주면서 상위 함수로 값을 넘겨줘야 합니다.
리턴값을 영상으로만 보시면 절대로 이해하기가 어렵습니다.
직접 종이에다가 하나씩 변수를 작성해가면서 풀어보시는 것을 추천드립니다.