오늘은 scsc친구들에게 stack 자료구조에 대한 세미나를 했는데요.. 사실 scsc친구들은 자료구조와 알고리즘에 대한 명확한 차이라던지 이해가 없어서인지 늘 제 세미나를 어려워합니다.. 어려워한다기 보다는 개발경험이 없다보니 이런저런 노하우를 가르쳐주면 저희과 후배들보다는 와닿는게 적어서인지 별로 리액션이 없어서 처음엔.. 얘네들 다들 이해를 한건가.. 할 정도로 놀라곤 했는데.. 요즘은 그러려니 하고., 예전만큼 열정적으로 가르치진 않고.. 기초 베이스에 초점을 맞추어서 가르치다보니 문제내고 푸는 시간을 주면서 점점 소홀해 지네요..ㅠ
스택이란 개념부터 짚고 넘어가면 나중에 들어간 친구가 먼저 나오는 방식의 자료구조입니다. 일상의 예를 들면, 보통의 멤버십 회원들의 일상으로 비유하자면 저는 예전에 리눅스 커널에 관련해서 시그를 이끌었고, 다달이 분과장 업무를 해냈으며, 멤버십 회원들처럼 과제를 진행하고 있었습니다. 멤버십이 아닌 외부에선 bmac에서 안드로이드 강의를 하였고, 학교 수업도 착실하게 다니고 있었죠^^.
먼저 반기마다 진행하는 시그(Study In Group... 관심분야에 대한 공부)활동을 진행하고 있습니다. 그러다가 멤버십회원이라면 보통 1년에 2개씩 과제를 진행해야 하므로 과제활동을 진행합니다. 과제의 효율을 위해선 팀원들이 다같이 합심해서 개인활동을 자제하고 과제를 진행합니다. 이 시기는 다른 활동을 팀원들을 위해서 양보해야 합니다..ㅎㅎ 그러다 월초나 월말에는 멤버십 회원들이 과제를 시작하거나 완료하는 발표를 하게 됩니다. 저는 분과장이라는 직책을 수행하고 있었기에 발표기간에는 제 과제보다는 팀원들의 과제가 원활하게 진행되었는지 혹은 과제의 어려움이나 진행방향등을 피드백해주기 위해서 발표를 듣거나.. 과제를 진행하는 회원들과의 컨택을 하는데 시간을 할애합니다... 그리고 가끔씩 운영자님이 급하게 호출하거나 저에게 부탁한 일이 있으면 다른 활동을 중단하고 운영자님께서 부탁하신 업무를 하게 됩니다..
먼가 글이 길어졌는데 요약하자면 (시그활동 OR 외부활동) < (멤버십과제) < (분과장업무) < (운영자님 지시사항) 이런식의 우선순위를 시간을 할애하겠죠.. 이 우선순위는 너무나 명료해서 절대 예외사항이 생기지 않습니다.. 그리고 상위 업무를 끝내기 전까진 하위 업무를 해서는 안되겠죠.. Round Robin이나 TIme Sharing이 아닌 interrupt 방식입니다.. 제가 시그활동이 있는 날인데 팀에서 회의를 하자고 하면 시그원들에게 사정을 말하고 시그를 다른날로 미루고.. 컨텍이 있는 날이면 팀원들에게 미리 양해를 구하는 방식입니다.. 이런 방식의 처리를 stack을 이용하여 할 수 있습니다.. 먼저 시그활동이나 개인적인 활동을 stack에 push를 합니다. 그리고 멤버십 과제를 진행중이면 다시 stack에 push를 하고.. 분과장 업무가 있을 때마다 stack에 다시 push를 합니다.. 그리고 나서 시간이 날때마다 stack을 pop하게 되면 제가 해야 할 일이 나오게 됩니다.. pop했던 업무를 모두 처리하고 나면 다시 pop을 해서 할일을 만들 수 있죠^^ 그러다 갑자기 운영자님의 호출이 생겼습니다.. 지금 제가 하고 있는 일을 stack에 다시 push를 해야 됩니다.. 그리고 나서 운영자님이 지시한 사항을 이행하고 stack에서 pop하여 원래 하던일을 하면 되는 겁니다..
scsc친구들에겐 그림과 함께 stack을 이런식으로 설명했죠.. 이해를 어느정도 했는지는 모르겠지만 전공자가 보기엔 정말 쓸데없이 장황한 설명이라고 생각하실 수도 있겠지만.. 비전공자들에겐 설명하기란 정말 힘들었네요..;;
무튼 스택을 설명하고 나서 과제를 내주었어요.. 프로그래밍 할때 필요한 센스를 길러주기 위해서.. 여러분들도 한번쯤은 생각해보는걸 추천드립니다..
"스택에 n개의 데이터가 들어있습니다. 이 n개의 데이터를 반대로 저장하고 싶어서 고민을 했는데.. 똑같은 크기의 공간을 하나 만들어서 그 안에 차례차례씩 넣은다음에 인덱스를 끝에서부터 처음으로 순차하면서 해당 스택에 다시 넣는 방식으로 하면 간단하게 해결됩니다.. 하지만 배열을 만들수 없을때.. 스택과 똑같은 크기의 배열을 만들지 말고.. (새로운 공간을 만들지 말고...) 해결 할 순 없을까요??"
멤버십 회원들은 stack을 자주 사용하시나요? 아마도 Ctri+Z, Ctrl+Y(실행취소, 재실행) 정도의 기능을 구현하기 위해선 사용을 해야될텐데요.. 저의 멘토님이 현재 퀀트개발자로 활동하고 있습니다.. 퀀트 개발자에게 스택은 정말 중요한 자료구조중에 하나겠죠.. 이런 기초개념이 과연 활용될까.? 라고 고민하시는 분에게 퀀트 개발자가 스택을 어떤식으로 활용하는지 사례를 보여드릴게요..
A종목의 주식시세를 날짜별로 데이터가 있다고 가정합니다..
1 : 2200
2 : 3200
3 : 2700
4 : 3000
5 : 2900
...(중략)
28 : 2700
29 : 3000
30 : 3100
특정 종목의 주식이 계속 상향이었던날은 최대 며칠이었을까요?? 쉽게 말하자면 연속상한가는 며칠동안 진행되었는지를 알고 싶어합니다.. 날짜별로 앞날보다 다음날이 더 상한가인지 체크를 하는방식의 알고리즘은 당연히 n^2의 시간복잡도를 가집니다.. n의 시간복잡도를 가지기 위해서는 어떻게 해야될까요??ㅎ
스택이란 개념부터 짚고 넘어가면 나중에 들어간 친구가 먼저 나오는 방식의 자료구조입니다. 일상의 예를 들면, 보통의 멤버십 회원들의 일상으로 비유하자면 저는 예전에 리눅스 커널에 관련해서 시그를 이끌었고, 다달이 분과장 업무를 해냈으며, 멤버십 회원들처럼 과제를 진행하고 있었습니다. 멤버십이 아닌 외부에선 bmac에서 안드로이드 강의를 하였고, 학교 수업도 착실하게 다니고 있었죠^^.
먼저 반기마다 진행하는 시그(Study In Group... 관심분야에 대한 공부)활동을 진행하고 있습니다. 그러다가 멤버십회원이라면 보통 1년에 2개씩 과제를 진행해야 하므로 과제활동을 진행합니다. 과제의 효율을 위해선 팀원들이 다같이 합심해서 개인활동을 자제하고 과제를 진행합니다. 이 시기는 다른 활동을 팀원들을 위해서 양보해야 합니다..ㅎㅎ 그러다 월초나 월말에는 멤버십 회원들이 과제를 시작하거나 완료하는 발표를 하게 됩니다. 저는 분과장이라는 직책을 수행하고 있었기에 발표기간에는 제 과제보다는 팀원들의 과제가 원활하게 진행되었는지 혹은 과제의 어려움이나 진행방향등을 피드백해주기 위해서 발표를 듣거나.. 과제를 진행하는 회원들과의 컨택을 하는데 시간을 할애합니다... 그리고 가끔씩 운영자님이 급하게 호출하거나 저에게 부탁한 일이 있으면 다른 활동을 중단하고 운영자님께서 부탁하신 업무를 하게 됩니다..
먼가 글이 길어졌는데 요약하자면 (시그활동 OR 외부활동) < (멤버십과제) < (분과장업무) < (운영자님 지시사항) 이런식의 우선순위를 시간을 할애하겠죠.. 이 우선순위는 너무나 명료해서 절대 예외사항이 생기지 않습니다.. 그리고 상위 업무를 끝내기 전까진 하위 업무를 해서는 안되겠죠.. Round Robin이나 TIme Sharing이 아닌 interrupt 방식입니다.. 제가 시그활동이 있는 날인데 팀에서 회의를 하자고 하면 시그원들에게 사정을 말하고 시그를 다른날로 미루고.. 컨텍이 있는 날이면 팀원들에게 미리 양해를 구하는 방식입니다.. 이런 방식의 처리를 stack을 이용하여 할 수 있습니다.. 먼저 시그활동이나 개인적인 활동을 stack에 push를 합니다. 그리고 멤버십 과제를 진행중이면 다시 stack에 push를 하고.. 분과장 업무가 있을 때마다 stack에 다시 push를 합니다.. 그리고 나서 시간이 날때마다 stack을 pop하게 되면 제가 해야 할 일이 나오게 됩니다.. pop했던 업무를 모두 처리하고 나면 다시 pop을 해서 할일을 만들 수 있죠^^ 그러다 갑자기 운영자님의 호출이 생겼습니다.. 지금 제가 하고 있는 일을 stack에 다시 push를 해야 됩니다.. 그리고 나서 운영자님이 지시한 사항을 이행하고 stack에서 pop하여 원래 하던일을 하면 되는 겁니다..
scsc친구들에겐 그림과 함께 stack을 이런식으로 설명했죠.. 이해를 어느정도 했는지는 모르겠지만 전공자가 보기엔 정말 쓸데없이 장황한 설명이라고 생각하실 수도 있겠지만.. 비전공자들에겐 설명하기란 정말 힘들었네요..;;
무튼 스택을 설명하고 나서 과제를 내주었어요.. 프로그래밍 할때 필요한 센스를 길러주기 위해서.. 여러분들도 한번쯤은 생각해보는걸 추천드립니다..
"스택에 n개의 데이터가 들어있습니다. 이 n개의 데이터를 반대로 저장하고 싶어서 고민을 했는데.. 똑같은 크기의 공간을 하나 만들어서 그 안에 차례차례씩 넣은다음에 인덱스를 끝에서부터 처음으로 순차하면서 해당 스택에 다시 넣는 방식으로 하면 간단하게 해결됩니다.. 하지만 배열을 만들수 없을때.. 스택과 똑같은 크기의 배열을 만들지 말고.. (새로운 공간을 만들지 말고...) 해결 할 순 없을까요??"
멤버십 회원들은 stack을 자주 사용하시나요? 아마도 Ctri+Z, Ctrl+Y(실행취소, 재실행) 정도의 기능을 구현하기 위해선 사용을 해야될텐데요.. 저의 멘토님이 현재 퀀트개발자로 활동하고 있습니다.. 퀀트 개발자에게 스택은 정말 중요한 자료구조중에 하나겠죠.. 이런 기초개념이 과연 활용될까.? 라고 고민하시는 분에게 퀀트 개발자가 스택을 어떤식으로 활용하는지 사례를 보여드릴게요..
A종목의 주식시세를 날짜별로 데이터가 있다고 가정합니다..
1 : 2200
2 : 3200
3 : 2700
4 : 3000
5 : 2900
...(중략)
28 : 2700
29 : 3000
30 : 3100
특정 종목의 주식이 계속 상향이었던날은 최대 며칠이었을까요?? 쉽게 말하자면 연속상한가는 며칠동안 진행되었는지를 알고 싶어합니다.. 날짜별로 앞날보다 다음날이 더 상한가인지 체크를 하는방식의 알고리즘은 당연히 n^2의 시간복잡도를 가집니다.. n의 시간복잡도를 가지기 위해서는 어떻게 해야될까요??ㅎ
태그 : 스택, 멤버십후배들을위한글








최근 덧글