08 / 10 / 26 성경말씀 - 성숙해 가는 신앙

Posted by ironmask84
2008. 10. 26. 11:51 생각과 일상/성경말씀



성숙해 가는 신앙 - 김종성 목사님

성장, 성숙 - 선택해야 할 영역

성장을 가로 막는 것 -> 두려움, 만족(이 정도면 됐다.. 이러한 생각), 지름길(수고와 땀과 인내가 없는..)

중요한 것은 '무엇을 할까가' 아니라 지금 '무엇을 하고 있는가' 이다.

영적인 성숙 - 끊임없이 주님께 나아가라.

에베소서 4:13
고린도전서 4:16
골로새서 3:23

 

중간고사가 끝났네..

Posted by ironmask84
2008. 10. 25. 20:16 생각과 일상/오늘의 일상


오늘도 그 동안 미뤘던 일상을 기록해 볼까 ㅋㅋ..

드뎌 이틀 전 중간고사가 끝났다.
이 바로 전 일기에서 이미 예상했던.. 알고리즘의 대한 압박감이..
해결되지 못했나 보다.. 그토록 신경쓸려고 시간도 꽤 많이 투자한 것 같은데..
괜히 긴장했나 보다..
이번 알고리즘 시험으로 깨달은 것은 시험 때 컨디션을 위해 신경을 써야겠다는 것과 시간분배..
알고리즘 치는 동안 눈이 침침하고, 정신이 맑지 않았던 것 같다.
괜히 조급해지기만 하고.. 이런 한심한 시험이 되다니... 쩝.. 부끄럽네 내 자신이..

하지만 이런 사소한 것에 집착하면 안 된다.
앞으로 해야 할 것들이 있고, 거기에 더욱 열정을 쏟으면 된다..
꼭 크게 이루고.. 여유를 가져보자.

그리고 기쁜 소식 한 가지!
다행히도 요번에 토익 730을 넘겼다..
점수는 745!!
755를 넘겨야 될 일도 있었는데.. 그건 머 다른 방법으로 대체하면 되니깐 머 ㅎㅎ
이것으로 삼성 인턴에 도전할 수 있게 되었다!
이제 전공공부에 매진이다!!!!!! 불태워 보자~!! 퐈이어~
 

입사 면접에서 꼭 나오는 질문 10개

Posted by ironmask84
2008. 10. 24. 16:36 About ironmask/취업준비





2004년 7월 미국 실리콘 밸리로 가는 캘리포니아 101 고속도로에 수수께끼같은 광고판이 나타났다.

[면접][면접질문][면접정보]입사 면접에서 꼭 나오는 질문 10개
"{first 10-digit prime found in consecutive digits of e}.com"라고 쓴 글씨뿐이었다. 이 숫자를 풀면 어떤 웹사이트(7427466391.com)에 도달하게 되는데 여기서 또다른 수학적인 장애물을 만나게 된다. 이것을 풀고 나면 구글 지사에 이력서를 제출할 수 있다(당시 구글은 웹 엔지니어를 모집하고 있었다).

취직하기 위해 모두가 이처럼 기죽이는 질문에 답할 필요는 없다. 하지만 면접 시험은 누구나 한번쯤 거쳐야 할 관문이다. 특히 입사 면접 때는 30분 안에 모든 게 판가름난다. 가장 흔하지만 어려운 면접 질문에 대답하는 방법과, 절대 입밖에 내서는 안되는 틀린 대답(×)을 소개한다.
[면접][면접질문][면접정보]입사 면접에서 꼭 나오는 질문 10개
Q: "자기 소개를 해보세요."

A: "안녕하세요. 저는 비둘기에게 모이 주는 것을 좋아해요."(×)

단도직입적이면서도 기본적인 질문임에 틀림없지만 쉽게 오해하기 쉬운 질문이다. 인터뷰하는 사람은 당신이 얼마나 이 직업에 어울리는지를 묻는 것이지 취미에 대해 장황하게 설명해 달라는 뜻은 아니다. 영국 뉴캐슬에 있는 '나이젤 라이트 리쿠르트먼트' 의 컨설턴트 크리스 본은 "인터뷰하는 사람으로부터 자기 자신에게 어젠다를 옮겨오고 싶어하는(아전인수의) 유혹에 빠지기 쉽다"며 "자기 소개를 하면서 취직을 희망하는 역할과 자기 경험을 연관지어 말하되 대답은 2 ̄3분 이내로 짧게 해야 한다"고 말한다. '온 어사인먼트 랩 서포트'의 고용 컨설턴트 크리스 리처드는 "인터뷰 내내 완전히 개인 감정을 드러내지 않아야 한다는 말은 아니다. 인터뷰하는 사람도 비슷한 경험을 했다면, 방금 집을 샀다든지 결혼했다든지 하는 일과 관련 없는 중요한 이벤트를 언급하더라도 친근감을 주는데는 도움이 된다"고 말했다.

Q: "내가 왜 당신을 고용해야 하죠?"

A: "저는 일자리가 꼭 필요해요. 도박 빚을 갚아야 하거든요."(×)

당신을 제대로 선전해보라는(팔아보라는) 얘기다. 주장을 뒷받침할 구체적인 예를 제시해야 한다는 게 중요하다. 회사를 위해 어떻게 기여할 수 있는지 입증할 수 있는 경력같은 것을 생각해보라. 인터뷰하는 사람(고용주)이 듣고 싶어하는 것은 앞으로 보여줄 도전이나 가망성에 대해 쓸데없이 지껄이는 말이 아니다. 옥스포드에 있는 컨설턴트회사 OPP의 직업 심리학자 롭 베일리는 " '성난 고객을 어떻게 다룰 것인가?'라는 가정이 아니라 '성난 고객을 어떻게 다뤄 보았는가?'하는 실제에 관한 질문"이라고 말한다. 물론 할 말이 많을 것이다. 노팅엄에 있는 IT회사의 HR(Human Resources 인력개발) 자문 수지 존스는 "가장 나쁜 것은 혼자 떠드느라 시간을 다 써버리는 것"이라며 "한번은 면접에서 자신의 설계 능력을 입증하기 위해 파이프 오르간 제조 과정을 설명하는 이를 만났는데 면접이 끝날 때쯤 되니까 나도 오르간을 만들 수 있을 만큼 충분히 알겠더라"고 말했다. 고용 컨설턴트사 SRG의 이언 맥킨리는 거짓말이나 과장은 금물이라고 경고한다. "정직하게 말하세요. 인터뷰하는 사람이 못 믿겠다고 판단하면 그것보다 더 나쁜 것은 없습니다."
[면접][면접질문][면접정보]입사 면접에서 꼭 나오는 질문 10개
Q: "5년 후의 당신의 모습은 어떨까요?"

A: "당신 의자에 앉아 있겠지요."(×)

직장에 얼마나 오래 남아 있을 생각인지 묻는 질문이다. 크리스 리처드는 "18개월 동안 여행도 하고 MBA나 PhD 학위도 따고 싶다고 절대 말하지 말라. 1년 안에 퇴사할 사람이라는 생각이 들게 만드는 어떤 말도 하지 마라"고 충고한다. 그냥 꿈과 야망이 있다는 것을 보여주면 된다. 너무 구체적으로 지적하지는 말라. 특정한 미래의 역할을 말했는데 실제로 그런 직책이 없을 경우엔, 인터뷰하는 사람이 당신이 중도에 퇴사할 가능성이 높다고 판단할지도 모른다.
[면접][면접질문][면접정보]입사 면접에서 꼭 나오는 질문 10개
Q: "당신은 팀 플레이어인가?"

A:"처음엔 친구, 두번째는 엔터테이너, 세번째는 보스로서 팀을 이끌어갑니다."(×)

그냥 '예'라고 대답하면 된다. "팀에서 어떤 역할을 맡고 싶은지 보여주면 된다. 이끌어가는 것을 좋아하는 사람도 있고 기록하는 사람도 있다. 창조적인 사람이 있는가 하면 분석적인 사람도 있다. 모두 중요한 역할이다."(크리스 본) "다른 사람과 어떻게 지내는가?" "당신의 동료들이 당신을 어떤 식으로 말하는가?"도 같은 질문이다.

Q: "동료와 의견 충돌을 해결해 본 적이 있는가?"

A: "물론 노력했지요. 하지만 그 바보가 내 생각을 전혀 받아들이지 않으려고 해요."(×)

절대 투덜거리거나 불평하지 말라. 어떤 의견 차이로 갈등했는지 간단히 설명하고 당신의 의견을 전달하기 위해 구체적으로 어떤 노력을 했는지 말하면 된다. 하지만 자발적으로 의견 충돌 주제를 끄집어내지는 말라. 나쁜 사람처럼 보인다.
[면접][면접질문][면접정보]입사 면접에서 꼭 나오는 질문 10개
Q: "당신의 약점은 무엇인가?"

A: "저는 완벽주의자에다 워크홀릭(일 중독자)입니다."(×)

수지 존슨은 "많은 사람들이 완벽주의자 또는 일 중독자라고 말한다"고 지적한다. 여기서 상투적인 대답에 의존하면 또 다른 약점을 드러낼 수 있다. 독창성이나 개성이 부족하다는 것이다. 하는 일에 지장을 줄 정도까지는 아닌 사소한 약점 하나를 말하는 게 방법이다. "약점을 해결하려는 노력을 통해 자기 의식과 문제 해결 능력을 보여주는 게 가장 중요하다."(크리스 본) 크리스 리처드는 두 개의 장점 사이에 약점 하나를 끼워 넣으라고 권한다. "내 고객과 정말 좋은 관계를 유지하다 보니 고객이 점점 늘어나 바빠졌어요. 하지만 나는 정리정돈을 잘 못하는 편이어서 모든 일을 기록해야 해요. 그래서 다이어리와 플래너를 쓰고 있습니다"고 대답하는 것이다.

Q:"우리 회사에 대해 어떻게 알고 있나요?"

A:"혹시 인조인간이세요? 미안합니다만, 오늘이 세번째 면접입니다."(×)

면접장에 도착했으니 누구나 회사 주소쯤은 정확하게 안다. 하지만 이 질문은 그동안 연구해온 것을 보여줄 기회다. 여기서 당신의 능력을 거침없이 보여줘야 한다. 예를 들어보자. "저는 아랍어를 잘 합니다. 당신 회사가 최근 중동으로 거래선을 넓히고 있다는 것을 알게 되었습니다." 당신이 입사를 희망하는 회사는 물론이고 일반적인 산업 부문에 대해 의견을 개진하라. 더 큰 그림을 보여준다면 감동할 것이다.

Q:"왜 현 직장을 그만두려고 합니까?"

A: "어떤 아부쟁이가 저 대신 승진하고 말았어요."(×)

긍정적으로 말하라. 도망 나오려고 하는 것에 대해 말하지 말고 새로 들어가려고 하는 곳에 대해 말하라. "어떤 지원자들은 전 직장에 대해 원한이 사무친 듯이 인터뷰 내내 전 직장의 사장에 대해 불평을 늘어놓는 경우도 있다. 자기를 소개하는 최선의 방법은 아니다."(수지 존슨)
[면접][면접질문][면접정보]입사 면접에서 꼭 나오는 질문 10개
Q: "기대하는 연봉 액수는?"

A: "전 직장보다는 많이 받고 싶어요."(×)

"만족할만한 연봉 액수에 대해 잘 생각해보고 솔직하게 말하라. 어떤 액수 이하를 받고서는 직장을 옮기지 않을 것이라면 다른 방법으로(우회적으로) 말하는 것은 별 도움이 되지 않는다."(크리스 본) 특정 액수를 말하는 것보다 범위를 말하는 것도 좋은 방법이다.

Q: "질문 없습니까?"

A:"화장실이 어디죠?"(×)

질병 수당이나 휴가에 대해 질문하는 것은 이 대목에서 경솔한 짓이다. 이미 앞에서 이야기를 끝냈어야 한다. 회사에 대해 당신이 해온 연구를 보여 줄 수 있는 질문이 좋다. 하지만 인터뷰하는 이도 사람이라는 것을 기억하라. 그러므로 "작년에 경영실적이 저조하던데 무엇 때문이죠?"같은 질문은 피하라. 지원하는 직장(일자리)에 관련된 적절한 질문 몇개를 미리 준비해 가라. 만약 인터뷰 도중 그 문제가 모두 해결되었다면 그냥 면접 과정에서 의문이 다 풀렸다고만 말해도 전혀 부끄럽지 않은 일이다.

▨면접에 관한 후일담

*마이크로소프트사는 면접 때 당황스러운 질문을 던지는 것으로 유명하다. 가령 "미국에 있는 자동차는 모두 몇대인가?" "저울 없이 어떻게 비행기의 무게를 잴 것인가?"… 요즘엔 다른 회사들도 기발한 질문을 던지는 편이다. 골치 아픈 질문을 던지는 것은 정답을 듣기 위한 것이 아니라 그 질문에 대해 접근할 때 얼마나 창의성을 발휘하는지를 보기 위해서다. 몇 개만 예를 들어보자.

(Q1) 남쪽으로 5 마일 걸어가서, 왼쪽으로 방향을 튼 다음, 동쪽으로 5 마일 걸어가서, 다시 왼쪽으로 몸을 틀어, 북쪽으로 5 마일 걸어갔다고 하자. 당신은 출발지점과 똑같은 곳에 서있다. 그곳 날씨가 어떤가?

(Q 2) 맨홀(하수구) 두껑은 왜 사각형이 아니고 원형인가?

(Q 3) 지하철 역을 새로 지을 때 건설회사에서는 에스컬레이터를 세 개만 설치한다. 그중 두 개는 항상 올라가고, 한 개만 내려오는 것이다. 왜 그런가?

(A1) 춥다. 북극 아니면 남극 대륙에 있을 가능성이 높다. 위도를 따라 원을 그리면 둘레가 5마일인 곳에서 북쪽으로 5마일 떨어진 곳이다.

(A2) 이유는 여러가지가 있다. 가장 중요한 이유는 원형 맨홀은 어떤 식으로 하든 구멍 속으로 빠지지 않기 때문이다. (동전을 세우듯 원형의 맨홀 두껑을 세우더라도 맨홀에 빠지지 않는다. 사각형 맨홀 두껑은 가로 세로의 길이가 대각선 길이보다 짧기 때문에 세로로 세웠을 때 맨홀의 대각선 쪽으로 빠져 버릴 수 있다. 또 여름과 겨울에 하수구 두껑이 팽창하고 수축하는데 이 때 사각 맨홀 두껑은 각진 부분이 잘 맞지 않아 틀어질 수 있다. 하지만 원형 맨홀은 전체적으로 고르게 수축 팽창을 하기 때문에 문제가 없다.)

(A3) 답은 여러가지다. 하지만 그중 하나는 열차에서 내리는 사람들은 갑자기 쏟아져 나오는데 반해(10~30초 정차하는 동안 승객이 내리는 시간은 5~15초 정도라고 보면 그 짧은 시간에 수많은 사람들이 쏟아져 내린다. 한꺼번에 많은 인파가 올라가는 에스컬레이터를 이용한다), 열차를 타기 위해 내려오는 사람들은 열차 정차 시간과는 관계 없이 꾸준하게 분산해서 도착하기 때문이다.

* 이 글은 매튜 킬레야의 The World's Toughest Interview를 옮긴 것입니다.
  괄호안은 이해를 돕기위해 옮긴이가 보탠말입니다.





 

직종분류

Posted by ironmask84
2008. 10. 24. 01:52 About ironmask/취업준비


1. 직종의 개념

직종이란 직무수행능력이 성질적(性質的)으로 가깝고 상호간에 호환 ·대체성이 인정되며 승진경로의 동일성까지 갖추어 임금관리상 같게 다룰 수 있는 것을 말한다. 직무수행능력의 성질과 승진경로가 같은 것을 하나의 직종이라 한다면 일반적으로 한 기업 내에는 많은 직종이 존재한다. 예를 들면 용접공 ·수위 ·사무원 ·연구원 등이 있는데, 이러한 일군(一群)의 직종을 직종군(群)이라고 한다. 이상은 직종을 직무수행능력의 관점에서 본 것이지만, 이를 직무의 관점에서 정의한다면, 직종은 직무의 종류가 유사하며 복잡성과 책임의 정도가 다른 직무의 군(群), 다시 말해 유사계열이나 관련이 있는 직무의 군이라고 할 수 있다.


2. 직종의 직무 내용

No.

직 종

일의 내용

1

기획/심사

․경영계획 및 전략 수립, 조정, 통제 및 실적평가 관련 업무  
․중장기 사업계획의 종합 및 조정
․경영정보 조사 및 기획보고, 자료 수집, 분석
․경영진단업무 및 종합원가관리
․종합예산수립 및 실적관리
․단기사업계획 종합 및 조정
․경영분석 및 평가
․사업계획, 손익추정, 실적관리 및 분석  
․관리회계제도 추진  
․신규사업 및 특수 프로젝트 검토추진
    - 세부항목 : 경영관리, 전략기획, 감사, 사업계획 등

No.

직 종

일의 내용

2

총무/관리

․문서 및 직인관리                                               ․주주총회 및 이사회개최 관련 업무   
․의전 및 비서업무                                               ․집기비품 및 소모품의 구입과 관리
․사무실 임차 및 관리                                          ․차량 및 통신시설의 운영             
․국내외 출장 업무 협조                                      ․사내외 행사 관련 업무(경조사 포함)
․복리후생 업무                                                    ․토지 및 건물 총괄관리            
․대 정부업무                                                        ․법률자문과 소송관리
․회사 재산보전 및 공용시설 관리                     ․각종 인․허가 및 대관청 업무
․용도품 조달, 차량, 비품, 통신시설 등 관리
․기업활동에 필요한 각종법제 연구 및 자문
   - 세부항목 : 재산관리, 섭외, 의전, 법제, 특허, 비상계획 등

3

인사/노무

․조직기구의 개편 및 조정           ․업무분장 및 조정                
․직무 및 정원의 조정 종합          ․인력 확보를 위한 산학협동업무       
․노사관리                                      ․평가관리                            
․상벌관리                                      ․인사발령                             
․신원보증 및 제증명 발급업무   ․교육체계 수립 및 관리, 교육훈련
․임금제도, 임금조정                  . ․복리후생제도 및 지원업무 
․복무관리                                      ․퇴직관리       
․인력수급계획 및 관리(채용, 승진, 이동, 고과)
․노동생산성 향상 및 근무의욕 고취방안 강구
  - 세부항목 : 인사, 노무, 교육 훈련 등

4

자재/구매

․구매계획 및 구매예산의 편성   
․시장조사 및 구입처 조사 검토            
․거래처 관리업무                        
․견적의뢰 및 검토                      
․구입계약 및 발주                     
․생산계획에 입각하는 납기독촉 및 납입통제 
․지급청구명세서 작성 및 납기 검수에 의한 지급절차 조절   
․입고, 출고 보관             
․입고, 출고에 관한 장표의 정리     
․창고대장 작성, 보관 및 창고관리    
․재고조사 및 재고통제               
․폐재의 정리 및 보관               
․관계규격 작성                
․창고일지 작성        
․구매 정책결정 및 자재 조달계획 수립
․원․부자재 수급, 수불 및 보관
․수출입 물품 통관 및 관세 환급
    - 세부항목 : 구매, 자재, 외주, 구매 사후관리

5

회계/경리/자금

․회계제도의 유지 및 관리                           ․회계제도의 고안 및 개선
․재무상태 및 경영실적 보고                      ․결산 관련 업무
․재무제표 분석 및 보고                              ․법인세, 부가세, 원천세 신고 및 세무관리
․국세 지방세 업무자문 및 지원                ․세금계산서의 발행지원 및 보관관리
․고정자산의 회계처리와 기록관리          ․보험가입 및 보상업무 
․고정자산의 처분승인                               ․양질 자금의 적기 조달 및 운용
․원가계산 및 관리                                       ․임금계산 지급
․결산재무제표 작성 및 제세금 계산, 납부
․자금수지계획 및 집행관리                       ․일일 자금 집행계획
․월별 자금수지계획                                   ․분기별 자금수지계획
․단기자금조달                                           ․당좌차월, 어음할인, 단자차입
․매출채권 및 매입채무관리                     ․예적금 및 유가증권관리
․출납관리                                                  ․자금 일계표관리
․장기자금 조달                                         ․자금조달계획 수립, 실적분석
․회사채 발행                                             ․리스업무
․보험금융업무                                         ․시설자금차입
․주식업무                                                 ․차입금 사후업무
․L/C 업무

 
 

No.

직 종

일의 내용

6

광고/홍보

․광고․홍보자료 조사 및 전략 수립
․각종 매체를 통한 기업 PR 및 제품광고
․사보제작, 발간 및 사내방송
․사내외 홍보 광고업무                

7

전산

․정보시스템 운영지원 및 유지관리  / 하드웨어 투자 및 유지관리
․PC 소프트웨어 투자 및 관리     . / 정보교육계획의 수립 및 시행
․영업지원 정보자료에 관한 업무    / 시스템 개발 관련 업무
․전산용역계약관리업무

8

영업-국내

․판매방침 및 계획
․판매예산의 편성 / 시장조사
․판로의 개척, 광고 선전 / 거래처의 신용조사와 신용한도의 신청
․견적 및 계약 / 제조지시서의 발행 / 외상매출금의 청구 및 회수
․제품의 재고 조절 / 견본품, 반품, 지급품, 예탁품 등의 처리
․거래처로부터의 불만처리/제품의 애프터서비스                
․판매원가 및 판매가격의 조사 검토
․제품판매정책 입안 및 제품 판매
․매출채권 수금, 거래선 및 담보관리 / 유통기획
․물류관리 / Customer Service
․마케팅 조사 및 관리

9

영업-수출/수입

․상품 및 플랜트 수출 절차이행, 수출입 면장발급
․해외시장 개척, 수출 상품개발
․해외지사 관리
․수입상품 개발, 비축 및 판매
․국내 시황 분석 및 수입정책 수립

10

R&D-개발기획

․신제품 개발 가능성 및 사업성, 경제성 검토
․신규사업계획 수립 및 진도관리
․각종 기술자료 조사, 분석 - 세부항목 : 개발기획, 제품개발, 디자인개발

11

R&D-연구설계

․특정 Theme 및 Item에 대한 연구 또는 설계 착수
․기초, 응용, 실용화 연구 및 연구보고서 작성, 보고
․연구 또는 설계자료의 생산부서 양산화 이행

12

생산-생산기술

․생산계획 및 생산실적 평가, 생산현장 관리
․작업표준화
․제조공정 및 제조원가 관리
․신기술, 신제품, 처방 및 공정 개선

13

생산-품질관리

․TQC활동 계획 입안 집행 및 사후 평가
․품질 표준 설정 및 생산단계별 품질검사
․KS규격획득, 제품 Claim처리, QC서클 운영 

14

생산-공무/안전

․생산 및 동력 설비의 제작, 설치, 운전, 정비, 보전
․설비공사 설계, 감독 및 기존설비의 개선
․사업장 안전시설 및 공해방지 시설 운영, 점검
․자동화 지원

15

생산-정보처리

․전산 시스템 개발, 설계 및 Maintenance
․전산기 운영 및 입, 출력 Data관리
․사무자동화 추진
․전산기 이용 기술지도

16

생산-기술용역

․공사 타당성 조사, 사업비용분석 및 사업계획 수립
․설계, 기자재구매, 시공감리, 검사 및 시운전
․기술자문, 교육훈련 유지 및 보수

17

생산-건축/토목

․공장, 주택, 공공시설 및 전기. 통신시설 등 설계, 시공
․도로, 수로, 댐, 터널, 교량 등 토목공사의 설계, 시공


 

08 / 10 / 19 성경말씀 - 단풍으로 물들기까지

Posted by ironmask84
2008. 10. 19. 11:57 생각과 일상/성경말씀



단풍으로 물들기까지 - 김종성 목사님

경건 - 주님을 닮아가고, 주님의 뜻을 이끌어 가는 사람

경건을 방해하는 것 - 망령되고 허탈한 신화

올바른 신앙훈련
1. 올바른 동기를 가지고 임해라.
2. 균형을 맞춰라.

빌립보서 4:12~13
고린도전서 9:24~25
야고보서 1:27

 

08 / 10 / 12 성경말씀 - 나침반

Posted by ironmask84
2008. 10. 12. 11:55 생각과 일상/성경말씀


나침반 - 김종성 목사님

집사는 - 목회자의 조력자, 사역자

사랑받는 사람, 존경받는 사람을 집사로 세워야 한다.

집사가 갖춰야 할 덕목 - 절제력, 자신의 감정 컨트롤, 정직

에베소서 6:21, 4:12
사도행전 6장

 

산세베리아의 효과

Posted by ironmask84
2008. 10. 11. 21:26 Excellent Tips



실내의 오염물질과 냄새를 흡수하는 것은 물론 정서안정에도 도움이 되는 관엽식물

그 중에서 정화 능력이 가장 뛰어난 것으로 알려져 있다.

공기 정화용 식물들 중에서도 특히 주목할 만한 것은 음이온 발생량이 많은 산세베리아~

그래서 최근 들어 웰빙 인테리어 소품으로 산세베리아를 찾는 사람들이 늘고 있다.

산세베리아는 다른 식물보다 30배 이상 우리 몸에 좋은 음이온을 내뿜으며
유해가스를 제거하고 냄새를 흡수한다.

또한 실내 습도 정도를 높여주며, 실내 온도를 조절해주는 효과도 있다.

TV, 컴퓨터등의 각종 전자제품에서 나오는 전자파를 차단하는 효과가
다른 식물에 배해 월등히 높다.

산세베리아는 열대 관엽식물로 잎이 두껍고 건조한 곳에서도
잘 자라 가정에서 키우기 쉬운 식물.

햇볕이 좋고 반그늘 아래에 두고 1달에 2번 정도만 물을 주어도 잘 자란다.

산세베리아는 실내 면적의 3% 정도의 비율이 되게,
중간 정도 크기의 화분을 2개 이상 두는 것이 효율적이다.

산세베리아의 두꺼운 잎은 연둣빛의 무늬가 있는 것이 특징~  컴퓨터 옆에는 작은 화분을
두는 것이 좋고, 소파 옆 거실의 한쪽에는 2~3개를 함께 두는 것이
공기정화능력을 높이고 인테리어 효과도 높이는 방법이다.

방안에 관엽식물을 두면 공기정화와 습도조절은 물론, 악취를 없애주고 전자제품에서
발산되는 전자파를 흡수하며, 인체에 유익한 음이온을 발산해준다.

참고로, 공기정화를 목적으로 관엽을 키우려면 실내 면적의 3~10% 정도를 녹색식물이
차지할수 있게 해야 제대로된 효과를 기대할수 있다.


출처 : https://blog.naver.com/gnh_love/100005017365

 

산세베리아 키우기

Posted by ironmask84
2008. 10. 11. 21:25 Excellent Tips


Sansevieria (꽃말 : 관용)

햇빛이 가득한 곳이 좋으나 음지에서도 잘 자란다.

온도 : 20이상에서 활발 , 겨울 5도 이상

물주기 : 한달 1회 물주기, 여름엔 4~5일에 건조상태봐서 줘야함,
         겨울에 온도가 10도이하로 가면 절대로 물을 함부로 줘선 안됨
         화분밑으로 물이 빠지도록 주는 것이 아니라 뿌리가 젖을 정도만 주면 된다.
 
특이사항 : 과습하거나 추우면 뿌리턱(흙과 줄기의 경계선)이 뭉크러지며,
           썩는다고 한다.

흙 : 배양토/마사토 6:4

삽목 : 뿌리로 부터 새 순이 나온것을 옮겨 심으면 되지만 잎이 썩었거나 뭉크러졌을때
       잎을 잘라 잎꽂이를 하면 된다. 잎꽂이를 할 때 생장기가 좋은 5~8월에 잎을
       약 10cm 잘라 3~5일 정도 말린다음 마사토나 모래에 심는데 주의 할 점은
       절대로 물을 줘서는 안된다. 마른흙에 심어 약 10~15일정도 물을 주지 않아야 한다.
       단 잎꽂이 했을 때 노란 옆줄 무늬는 없어진다는 사실..

주의사항 : 잎사기에 스프레이 금지해야 함

기타 : 일반식물은 낮에 이산화탄소를 마시고 광합성을 하여 산소를 내뿜고
       밤에는 산소를 마시고 이산화탄소를 내뿜는데 비해
       산세베리아는 다육의 종류라 반대로 밤에 이산화탄소를 들이마신다 하여
       밤의 실내공기를 정화 하는데 효과가 있다고 한다.

참고 : 뿌리로 번식을 할 경우 화분이 너무 크면 뿌리만 자꾸 커질뿐 땅위에 있는
       잎에는 소홀해진다고 한다. 관음죽을 작은 화분에 심는 이유가 여기에 있다.


출처 : https://blog.naver.com/sjlove321/100046255308

 

부산국제영화제, 교양, 그리고 이젠..

Posted by ironmask84
2008. 10. 11. 00:19 생각과 일상/오늘의 일상


사실 부산국제영화제는 10/4에 관람했었다.

그 날 일기를 쓴다는 것이 미루고 미루어져 오늘에야 쓴다.

'스카이 크롤러' 라는 애니메이션이었는데,  내용도 그럭저럭 신선한 소재였고,
특히, 그래픽은 굉장한 수준이었다. 이 날 친구넘(선구)에게서 들은 얘긴데, 이 만화 그린 사람이
'공각기동대' 그린 사람이란다. 얼핏 비슷한 것 같기도 하고.. 암튼 다 좋았는데...
상영시간 15분을 남기고 스크린 전원이 나가고 ㅡㅡ......... 1시간 기다려서 15분 마저 봤다..
환불 조치 취해준다 했지만.. 귀찮아서.. 그냥 표 그대로 가지고 있을란다. ㅋㅋㅋ
불쌍한 자봉들만.. "죄송합니다!" 연방 외치고 ㅋㅋㅋㅋ

그리고 공학작문 하면서 느낀 것이 정말 교양인이 되어야 겠다고 느꼈다.
'도쿄대생은 바보가 되었는가." 라는 책을 읽으니 정말 나도 빨리 깨어나고 싶은 욕망이...

이제 10월 10일.. 아니 이제 11일 되었삤네...
중간고사가 코 앞이다.. 이번학기.. 4.0 넘어보고 싶다..
여자따위 생각할 때가 아니지...
넌 진정한 남자.. 교양인이 되어보는 거다.. 여자는 알아서 따라오겠지..그건 좀 그런가? ㅎㅎ
암튼, 2주일동안 슈퍼맨이 되는거다. 화이링..


 

사랑이란

Posted by ironmask84
2008. 10. 7. 21:34 생각과 일상/아름다운 글


사랑이란


사랑은 마주보는 것이 아니라
함께 같은 방향을 보는 것이다.

- 생 텍쥐베리 -

사랑은 눈으로 보는 것이 아니라
마음으로 보는 것이라고 합니다.
내가 당신을 필요로 해서
당신을 사랑하는 것이 아니라
당신을 사랑해서
당신을 필요로 하는 것이라고 합니다.
같은 목표를 향해 같은 마음으로
함께 가는 것이 사랑입니다.

'생각과 일상 > 아름다운 글' 카테고리의 다른 글

나와 상대의 조건에 따라서  (0) 2016.09.10
3배로 사는 인생  (0) 2011.01.23
 

08 / 10 / 05 성경말씀 - 징검다리

Posted by ironmask84
2008. 10. 5. 11:57 생각과 일상/성경말씀


징검다리 - 김종성 목사님

너희와 하나님의 사이는 끊어져 있는 다리와 같은 관계로 있지만,

하나님과 우리를 이어주는 중보자 - 예수님

기도의 중보자가 되자.

기도는 하나님과의 교제이지만, 사역이다.

요한복음 2:5, 4:14
로마서 15:16

 

Software Process Model

Posted by ironmask84
2008. 9. 28. 21:06 컴퓨터공학


소프트웨어 프로세스 소프트웨어 제품을 생산하기 위해서 필요한 활동의 집합이다.
소프트웨어 프로세스의 기본적인 활동은 다음과 같으며 모든 프로세스에 대해서 공통적이다.

1. 소프트웨어 명세화 : 소프트웨어 기능과 운영상의 제약 조건을 정의
2. 소프트웨어 설계와 구현 : 명세서와 일치하는 소프트웨어를 생산
3. 소프트웨어 검증 : 고객이 원하는 소프트웨어인지 검증
4. 소프트웨어 진화 : 소프트웨어는 변하는 고객의 요구에 맞도록 개선되어야 함

비록 '이상적인' 소프트웨어 프로세스는 없지만 많은 조직에서 소프트웨어 프로세스를 개선할 수
있는 여지는 있다.

소프트웨어 프로세스 모델(프로세스 패러다임)은 소프트웨어 프로세스의 추상적인 표현이며, 명확한
기술이 아니다.
오히려 소프트웨어 개발의 방법을 설명하기 위해서 사용될 수 있는 프로세스의 추상화이다.
특정 소프트웨어 공학 프로세스를 만들기 위해서 인용되고 확장될 수 있는 프로세스 프레임워크로
생각할 수도 있다.

이 프로세스 모델을 도식화 하여 나타낸 일련의 흐름을 Software LifeCycle 이라고 하며 주요한 요소

          1. Phases          |          2. Intermediate Products          |          3. Reviews

를 포함하고 있다.
어떤 LifeCycle 이 옳다거나 혹은 잘 못되었다는 기준은 없다.
개발 상황이나 목표 등을 명확하게 고려하여 적절한 모델을 택하는 것이 중요하며 그것이 S/W 공학
을 전공한 Architect 의 역량이 아닐까라고 생각해본다.

[ 1. Build and Fix Model ]
소위 'Simple is Best' 의 명확한 보기가 될 수 있는 모델로..
내 노트에 '될 때 까지 계속해, 어서~♡(싸모님 ver)'  라고 적혀있다.
제목 그대로 First 작업 후 test 를 하여 Modify 를 반복하는 방법이다.
거의 대부분의 학생들이 report 할 때 적용하는 방식이라고 강석중 교수님께서 농담을 하셨는데..;;
사실이라는..;;;
사용자 삽입 이미지

Build & Fix Process Model

[ 2. WaterFall Model ]
한글번역본을 보면 '폭포수' 모델로 번역되어 있다.
흔히 순차적인 작업을 일컫는 용어로써 단계별로 Verify 와 Test를 거치며..
단순하고 간단하다는 장점이 있다.
또한 문서가 각 단계마다 만들어지기에 다른 공학 프로세스 모델에 잘 어울리기도 한다.
하지만 폭포수는 한 번 물이 떨어지면 다시 역으로 올라오지 못하는 자연의 진리처럼...
WaterFall Model 은 오류가 생겼을 경우 이전 단계로 돌아갈 수 없다는 단점이 있다.
그래서 수정시에는 Intergration 이라는 단계를 거치게 된다.

사용자 삽입 이미지

WaterFall Process Model


[ 3. Rapid Prototyping Model ]
개인적인 모토이기도 한 Speed & Fast 를 중점적으로 고려하는 Model 이다.
진화적 모델이라고도 변역하는데 여기서 Prototype 은 '원형' '시제품' 'Demo' 등을 의미한다.
즉 초기에 구현을 한 후 이것을 이용하여 사용자의 의견을 반영, 만족스러운 시스템이 개발될 때
까지 Version UP 을 하는 방법이다.
Prototype 의 운명은 다음의 두 가지로 나누어지게 된다.
1. 실험적 개발(testing)
고객과 함께 그들의 요구사항을 찾아내면서 최종 시스템을 만들어가는 과정으로 Prototype의
일부분을 가지고 개발이 시작되며 그 시스템은 고객에 의해 제안된 사항을 토대로 수정/추가
되면서 발전한다.
즉, Prototype 을 실제적으로 사용하게 된다.

2. 쓰고 버리는 프로토타이핑(Throwaway Prototyping)
사용자의 요구사항을 이해하고 시스템에 대한 요구사항을 더 잘 정의하기 위한 프로토타입으로
이해가 잘 되지 않는 고객의 요구사항을 실험하는데 쓰이며 추후에는 버려지게 된다.

이 방식의 문제점은 Abstract(추상화)이 가능하기 때문에 Design 과 실제 Implement 된 시스템
사이의 Gap 이 생길수가 있다는 점이다.
대형 시스템의 경우 WaterFall 과 함께 Prototype model 를 혼용하는 것을 추천한다.
사용자 삽입 이미지

Rapid Prototyping Model

[ 4. Incremental Model ]
순차적, 점증적이라는 뜻의 Increments 를 정의하고 각 증분에 대한 우선순위를 적용한 후에
단계별로 순차적으로 개발하는 Process Model 을 일컫는다.
이전의 WaterFall 과 Prototype 의 단점인 유지보수의 어려움 및 설계 및 요구분석에서의 난해함을
보완하기 위해서 나온 모델이다.
점증적 개발 프로세스는 다음과 같은 장점을 지닌다.
1. 고객은 전체 시스템이 인도될 때 까지 기다릴 필요가 없다.
   각 증분마다 결과물이 나오며 첫 번째 증분이 고객의 가장 핵심적인 요구사항을 충족하기 때문
   이다.
2. 고객은 초기의 증분을 프로토타입으로 사용하고 추후에 시스템 증분에 대한 요구사항을 정보
    또한 얻을 수 있는 경험을 획득할 수 있다.
3. 전체 프로젝트 실패에 대한 위험이 적다.
   한 증분에서 문제가 생기면 그 부분을 집중적으로 보완하면 결과적으로 성공적인 개발이 된다.
4. 가장 높은 우선순위 서비스가 먼저 인도되고 추후의 증분이 그것과 통합되기 때문에, 가장
   중요한 시스템 서비스가 가장 많이 시험된다.
그러나 모든 것은 양면적인 성향을 띄듯이, Incremental Model 에도 문제는 있다.
증분되는 각각의 작업은 비교적 작아야 하며(20,000라인 이하) 각 증분은 시스템 기능을 제공해야
한다는 점이다.
또한 전체 Frame Work Architecture 를 미리 설계해야 하는 어려움이 따르며 각 증분을 check 하기
위한 check List 가 존재해야 한다.
Operations 가 각 단계별로 보이지 않는다는 단점도 가지고 있다.

이러한 점증적 방법의 변형을 익스트림 프로그래밍(Extreme Programming) 이라고 한다.
이 방법은 매우 작은 증분을 개발하고 인도하는 것으로, 이 프로세스에 고객이 참여하고 지속적인
개선과 프로그래밍이 이루어진다.
사용자 삽입 이미지

Incremental Process Model

[ 5. The Spiral Model ]
나선형 모델(달팽이 모델, Boehm, 1988)은 내부 반복을 동해서 시스템의 타당성을 증진시키고
요구사항 정의, 시스템 설계 등의 단계를 완성시키는 프로세스 모델이다.
나선에 있는 각 반복을 네 부분으로 나타내면 다음과 같다.
1. 목표 설정 : 프로젝트의 단계에 대한 목표와 Risk, 대안전력 등이 설정된다.

2. 위험 평가 및 감소 : 식별된 각 위험의 종류에 따라 상세 분석이 수행.
                               필요에 따라서 프로토타입 시스템을 개발하기도 한다.

3. 개발과 검증 : 위험평가 후에 그 시스템에 대한 개발 모델이 선택된다.
                       예를 들어 UI에 대한 Risk 가 높다면 Prototyping Model을 선택하게 될 것이며
                       주요 위험이 서브시스템 통합이라면 WaterFall Model 이 적합할 것이다.

4. 계획 수립 : 나선에 대한 추가 반복을 수행할 지의 여부를 결정 후 다음 단계 계획을 수립    


사용자 삽입 이미지

The Spiral Process Model

'컴퓨터공학' 카테고리의 다른 글

국제 프로그래밍 대회 Codeforce  (0) 2016.04.28
합병정렬 - 알고리즘  (0) 2008.09.21
퀵소트 - 알고리즘  (4) 2008.09.21
삽입정렬 - 알고리즘  (0) 2008.09.21
임베디드 시스템과 임베디드  (0) 2008.09.15
Embedded에서 ARM의 의미  (0) 2008.09.15
운영체제의 종류  (0) 2008.09.15
프로그래밍언어론 - 용어  (0) 2008.09.03
cache 적중률  (1) 2008.08.31
cache memory - 2  (0) 2008.08.31
 

합병정렬 - 알고리즘

Posted by ironmask84
2008. 9. 21. 22:43 컴퓨터공학


 
 Merge Sort


합병정렬은 mergesort(머지소트)라고도 불리우며 O(nlogn)의 복잡도를 가지는 정렬알고리즘이다. 합병정렬 또한 앞서 살펴본 분할정복법을 사용한다. 정렬은 해당 아이템의 수가 많은 수록 비교 및 삽입 연산이 많이 발생하게 된다. 따라서 그 연산을 최소화하기 위하여 정렬하고자 하는 해당 배열을 충분히 분할한 후 거꾸로 합병하면서 정렬을 하여 최종적으로 전체 배열의 정렬을 하는 방식이다.

합병정렬은 다음과 같은 절차로 진행된다.

1. 분할 : 배열을 n/2개 아이템으로 가진 2개의 부분배열로 분할한다.
2. 정복 : 정렬함으로써 각 부분배열을 정복한다(푼다). 배열이 충분히 작지 않으면 재귀 호출을 한다.
3. 통합 : 부분 배열에 대한 답들을 합병하여 하나의 정렬된 배열로 만든다.

배열을 2개 이상의 배열로 분할 할 수 있는데 n개의 배열로 분할하게 되면 n-원 합병정렬이 된다.

다음은 재귀적 방법을 이용하여 합병정렬을 구현한 것이다. 재귀적 함수에는 반드시 종료조건이 존재해야 한다. 종료조건은 배열의 크기가 1에 도달하는 경우가 되고, 바로 그 시점부터 합병이 시작된다.

사용자 삽입 이미지

#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#define KEY_SIZE   50    // 정렬할 배열의 크기
// 배열의 내용을 다른 배열로 복사하는 함수
void arrayCopy(const int src[], int dest[], int size)
{
      int i;
      for (i=0; i<size; i++) {
            dest[i] = src[i];
      }
}
// 분할된 부분배열을 합병하는 함수
void merge(int h, int m, int Ldiv[], int Rdiv[], int key[])
{
      int i, j, k;
      i = j = k = 0;
 
      while (i < h && j < m) {
            if (Ldiv[i] < Rdiv[j]) {
                  key[k] = Ldiv[i++];
            } else {
                  key[k] = Rdiv[j++];
            }
            k++;
      }
 
      /* 나눠진 두개의 배열에서 어느 한쪽이 더 큰경우
       * 나머지 배열의 요소를 복사한다.
       */

      if (i == h)
            arrayCopy(Rdiv+j, key+k, m-j);
      else
            arrayCopy(Ldiv+i, key+k, h-i);
}
// 합병정렬을 수행하는 함수
void mergeSort(int n, int key[])
{
      const int h = n/2;
      const int m = n -h;
      int L_index, R_index, key_index;
      int *Ldiv, *Rdiv;
      if (n>1) {
            Ldiv = (int *)malloc(h * sizeof(int));
            Rdiv = (int *)malloc(m * sizeof(int));
            arrayCopy(key, Ldiv, h);
            arrayCopy(key+h, Rdiv, m);
 
            mergeSort(h, Ldiv);
            mergeSort(m, Rdiv);
            merge(h, m, Ldiv, Rdiv, key);
 
            free(Ldiv);
            free(Rdiv);
      }
}
int main(void)
{
      int i;
      int key[KEY_SIZE];
 
      srand((unsigned int)time(NULL));
      printf("====== Before Merge sort");
      for (i=0; i<KEY_SIZE; i++) {
            if (i%20 == 0)
                  puts("\n");
            key[i] = rand() % 100;  // KEY_SIZE 만큼의 무작위 수 생성
            printf("%d ", key[i]);
      }
      mergeSort(KEY_SIZE, key);   // 합병정렬
      printf("\n\n====== After Merge sort");
      for (i=0; i<KEY_SIZE; i++) {
            if (i%20 == 0)
                  puts("\n");
            printf("%d ", key[i]);
      }
      return 0;
}

위 구현된 합병정렬을 살펴보면 알겠지만 합병정렬을 수행하기 위해 입력된 배열 이외의 추가적인 배열(Ldiv, Rdiv)가 사용되는 것을 알 수 있다. 따라서 mergeSort 함수가 수행될 때 마다 배열들이 추가적으로 할당된다.

최상위의 두 배열의 아이템 개수는 n개이다. 처음 재귀호출을 하게 되면 이는 n/2개가 되고, 다음에는 n/4개가 된다. 평균적으로 재귀 호출시 두 배열의 아이템 개수는 바로 전 아이템 개수 합의 반이 된다. 따라서 추가적으로 만들어지는 배열아이템의 총 수는 n(1 + 1/2 + 1/4 + ... ) = 2n 이 된다.

위의 예제가 분할정복법(Divide-and-Conquer)를 설명하기에는 적합할지 모르지만 메모리 사용에서는 상당히 비 효율적이다. 따라서 제자리정렬(in-place sort)로 다시 구현해 보자. 제자리정렬은 입력을 저장하는 데 필요한 장소 이외의 추가적인 저장장소를 사용하지 않는 정렬 알고리즘이다.

다음은 제자리 정렬로 구현한 합병정렬이다.

void merge(int low, int mid, int high)
{
      int i, j, k;
      for (i=low; i<=high; i++) {
            temp[i] = key[i];       // 임시배열로 해당 키 값을 복사한다.
      }
      i = low; j = mid+1; k = low;
      while (i <= mid && j <= high)
            if (temp[i] < temp[j])
                  key[k++] = temp[i++];   // 다시 원래 배열로 키 값을 크기에 맞게 복사한다.
            else
                  key[k++] = temp[j++];
      while (i <= mid)              // 키값에 따라 복사되고 난 나머지 키들을 복사한다.
            key[k++] = temp[i++];
}
void mergeSort(int low, int high)
{
      int mid;
      if (low < high) {
            mid = (low + high)/2;
            mergeSort(low, mid);
            mergeSort(mid+1, high);
            merge(low, mid, high);
      }
}

출처: http://proneer.tistory.com/entry/Sort-합병-정렬Merge-Sort

'컴퓨터공학' 카테고리의 다른 글

국제 프로그래밍 대회 Codeforce  (0) 2016.04.28
Software Process Model  (0) 2008.09.28
퀵소트 - 알고리즘  (4) 2008.09.21
삽입정렬 - 알고리즘  (0) 2008.09.21
임베디드 시스템과 임베디드  (0) 2008.09.15
Embedded에서 ARM의 의미  (0) 2008.09.15
운영체제의 종류  (0) 2008.09.15
프로그래밍언어론 - 용어  (0) 2008.09.03
cache 적중률  (1) 2008.08.31
cache memory - 2  (0) 2008.08.31
 

퀵소트 - 알고리즘

Posted by ironmask84
2008. 9. 21. 22:38 컴퓨터공학



 
Quick Sort


퀵 정렬(Quick Sort)는 호아(Hoare, 1962)가 정의한 알고리즘으로 이름에서도 알 수 있듯이 매우 빠른 수행속도를 가진다. 퀵 정렬은 합병정렬과 비슷하게 분할정복법(Divide-and-Conquer) 방법에 근거한다. 전체 데이터를 두 부분으로 분할한 다음, 분할된 각 부분은 재귀적으로 다시 퀵 정렬을 수행한다.

퀵 정렬은 합병정렬과 비슷하게 보이지만 합병정렬과는 다르게 전체 데이터를 균등하게 분할하는 것이 아니라 기준(pivot)을 선택하여 기준보다 작은 데이터를 왼쪽에 위치시키고, 큰 데이터는 오른쪽에 위치시킨다. 일반적으로 기준은 첫번째 데이터로 선택한다. 결과적으로 기준의 왼쪽에는 기준보다 작은 데이터가, 오른쪽에는 큰 데이터가 위치하게 된다.

기준에 따라 데이터의 이동을 살펴보면 다음과 같다.

15 22  13  27  12  10  20  25

1. 기준 아이템(15) 보다 작으면 왼쪽, 크면 오른쪽에 위치시켜 분할한다.

10  13  12  15  22  27  20  25


2. 부분배열을 정렬한다.
10  12  13  15  20  22  25  27

위 내용은 한번의 부분배열을 통해 정렬되는 과정을 보여준 것이다. 실제 퀵 정렬은 재귀적으로 더이상 분할할 수 없을때까지 분할된 후 정렬을 수행한다.

다음을 통해 좀 더 쉽게 퀵 정렬을 살펴볼 수 있다.

[Flash] http://proneer.tistory.com/attachment/dk030000000000.swf



다음은 퀵 정렬에 대한 알고리즘이다.
void quicksort( index list[], index left, index right )
{
          if ( left < right ) {
                    index pivot = partition( list, left, right );
                    quicksort( list, left, pivot-1 );
                    quicksort( list, pivot+1, right);
          }
}

다음은 분할에 대한 알고리즘이다.
index partition( index list[], index left, index right)
{
          index pivot, temp, low, high;
          low = left;
          high = right+1;
          pivot = list[left];
          do {
                    do 
                              low++;
                    while ( list[low] < pivot );
                    do 
                              high--;
                    while ( list[high] > pivot );
                    if ( low < high ) SWAP( list[low], list[high], temp );
          } while ( low < high );
         
          SWAP( list[left], list[high], temp );
          return high;
}

그럼 이제 퀵 정렬의 복잡도를 살펴보자. 퀵 정렬은 최악의 경우 O(n2) 의 복잡도를 갖는다. 최악의 경우는 모든 데이터가 정렬된 경우이다. 이 경우 맨 앞의 데이터를 기준으로 선택했을 경우 데이터가 분할되지 못하므로 한번의 비교 연산이 n 번 이루어 진다고 하면 모든 데이터에 대해서는 O(n2)의 시간이 걸릴 것이다.

복잡도가 O(n2)인데 어떡해 이 알고리즘이 빠른 정렬이라고 불리게 되었을까? 그 이유는 평균의 경우 때문이다. 평균적인 경우 데이터에서 기준으로 선택될 확률은 모두 같다. 따라서, 평균은 모든 가능한 순서를 같은 횟수 정렬할 때의 평균 정렬시간이다. 말이 조금 어려울지 모르나 평균적인 경우에는 O(n log n)이 된다.

특히, O(n log n)의 복잡도를 가지는 다른 정렬알고리즘 보다도 더 빠르게 수행된다는 것이 증명되었다. 이러한 이유는 불필요한 데이터의 이동을 줄이고 먼 거리의 데이터를 교환할 뿐만아니라, 한번 결정된 기준은 추후 연산에서 제외되는 성질을 가지기 때문이다.

퀵 정렬은 추가적인 메모리공간을 가지지 않는 제자리 정렬임에도 불구하고 한가지 단점은 앞서 말한대로 이미 정렬된 데이터에 대해서는 오히려 많은 시간이 걸리게 된다. 이러한 문제를 해결하는 방법은 기준을 선태할 때 왼쪽에서 선택하는 것이 아니라 중간 값을 기준으로 선택하는 것이다.


다음은 하나의 함수에 분할과 정렬을 모두 구현한 예이다.
void quicksort(int a[], int lo, int hi)
{
          //  lo is the lower index, hi is the upper index
          //  of the region of array a that is to be sorted

         int i=lo, j=hi, h;
         int x=a[(lo+hi)/2];
         //  partition
         do {    
             while (a[i]<x) i++;
             while (a[j]>x) j--;
             if (i<=j) {
                 h=a[i]; a[i]=a[j]; a[j]=h;
                 i++; j--;
             }
         } while (i<=j);
         //  recursion
         if (lo<j) quicksort(a, lo, j);
         if (i<hi) quicksort(a, i, hi);
}



퀵 정렬 라이브러리 함수 사용
보통 C언어 라이브러리에는 퀵 정렬 함수가 제공된다. 일반적으로 qsort 라는 이름으로 제공되며 다음과 같은 함수 원형을 가진다.

함수의 원형
void qsort(
          void *base,
          size_t num;
          size_t width,
          int (*compare) (const void *, const void *)
};

base - 배열의 시작주소
num - 배열 요소의 개수
width - 배열 요소 하나의 크기(바이트단위)
compare
- 비교함수, 포인터를 통하여 두개의 요소를 비교하여 비교 결과를 정수로 반환, 사용자가 제공하여야 한다.

함수 사용 예
#include <stido.h>
#include <string.h>
#include <stdlib.h>

int compare( const void *arg1, const void *arg2 )
{
          if ( *(double) arg1  >  *(double *) arg2 ) return 1;
          else if ( *(double) arg1  ==  *(double *) arg2 ) return 0;
          else return -1;
}

int main()
{
          int i;
          double list[5] = { 2.1, 0.8, 2.2, 1.5, 3.3, 1.0 };
          qsort( (void *)list, (size_t)5, sizeof(double), compare );
         
          return 0;
}

Reference : Data Structures in C, 생능출판사
                 FOUNDATIONS of ALGORITHMS using C++ PSEUDOCODE, 사이텍미디어
                 http://ko.wikipedia.org/
                 http://www.iti.fh-flensburg.de/lang/algorithmen/sortieren/quick/quicken.htm
출처 : http://proneer.tistory.com/entry/Sort-퀵-정렬Quick-Sort


2015_11_23 추가 (Integer 타입으로 테스트 코드)
(Visual Studio 에서 자동들여쓰기 정렬 기능 - Alt+F8 굿)

#include <stdio.h>
#include <stdlib.h>

void quicksort( int *a, int low, int high )
{
int pivot;
/* Termination condition! */
if ( high > low )
{
pivot = partition( a, low, high );
quicksort( a, low, pivot-1 );
quicksort( a, pivot+1, high );
}
}

void swap(int *a,int left,int right)
{
int temp;
temp = a[left];
a[left] = a[right];
a[right] = temp;
}

// pivot 위치를 left 즉, index의 첫번째 위치의 녀석으로 잡고 돌아간다..
int partition( int *a, int low, int high )
{
int left, right, pivot;
int *pivot_item = (int *)malloc(sizeof(int));

*pivot_item = a[low];

pivot = left = low;

right = high;

while ( left < right ) {
/* Move left while item < pivot */
while( a[left] <= *pivot_item ) left++;
/* Move right while item > pivot */
while( a[right] > *pivot_item ) right--;
if ( left < right ) swap(a,left,right);
}
/* right is final position for the pivot */
a[low] = a[right];
a[right] = *pivot_item;
return right;
}

void main()
{
int val[8] = {67, 90, 57, 25, 84, 32, 73, 54};
int i = 0;

quicksort(val, 0, 7);

printf("val : ");
for(i = 0; i < 8 ; i++)
{
printf("%d\n", val[i]);
}

}


'컴퓨터공학' 카테고리의 다른 글

국제 프로그래밍 대회 Codeforce  (0) 2016.04.28
Software Process Model  (0) 2008.09.28
합병정렬 - 알고리즘  (0) 2008.09.21
삽입정렬 - 알고리즘  (0) 2008.09.21
임베디드 시스템과 임베디드  (0) 2008.09.15
Embedded에서 ARM의 의미  (0) 2008.09.15
운영체제의 종류  (0) 2008.09.15
프로그래밍언어론 - 용어  (0) 2008.09.03
cache 적중률  (1) 2008.08.31
cache memory - 2  (0) 2008.08.31
 

삽입정렬 - 알고리즘

Posted by ironmask84
2008. 9. 21. 22:02 컴퓨터공학


 
Insertion Sort


삽입정렬은 이름에서 알 수 있듯이 삽입을 통해 정렬을 완성하는 알고리즘이다. 삽입정렬은 모든 데이터를 앞에서부터 차례로 비교 하여 자신의 위치에 삽입을 통해 정렬을 수행한다. 배열이 길어질수록 효율이 떨어지지만 구현이 간단하다는 장점이 있다.

삽입정렬의 과정을 살펴보면 다음과 같다.

[Flash] http://proneer.tistory.com/attachment/dl146.swf



다음은 삽입정렬을 구현한 예이다.

#using C
void insertionSort(int list[], int n)
{
          int i, j, key;
          for(i=1; i<n; i++) {
                    key = list[i];  // 두 번째 값부터 선택
                    for(j=i-1; j>=0 && list[j]>key; j--)  // 선택된 값(key)보다 작은 값을 찾는다.
                              list[j+1] = list[j];       // 작은 값을 찾은 경우 그 값뒤의 모든 값을 우측으로 이동
                    list[j+1] = key;       // 해당되는 곳에 값을 삽입한다.
          }
}

삽입정렬 또한 비교연산을 상수로 보고 주어진 데이터가 정렬되어 있지 않다고 보면 O(n2)의 시간복잡도를 가진다. 삽입정렬의 특징은 시간복잡도가 입력 자료의 구성에 따라 달라진다는 사실이다. 입력 자료가 정렬되어 있으면 있을 수록 빨라진다. 따라서, 같은 시간복잡도를 가지는 선택정렬이나 버블정렬보다 효율이 높다.

삽입정렬은 또한 안정한 정렬방법이며 제자리 정렬(in-place sort)이다. 안정한 정렬이라는 것은 같은 값일 경우 상대적 위치가 바뀌지 않는 경우이다. 제자리 정렬은 정렬을 위해서 주어진 자료 공간 이외의 공간을 사용하지 않고 정렬하는 것을 말한다.


Reference : http://ko.wikipedia.org/
                 Data Structures in C, 생능출판사

출처 : http://proneer.tistory.com/entry/Sort-삽입-정렬Insertion-Sort

'컴퓨터공학' 카테고리의 다른 글

국제 프로그래밍 대회 Codeforce  (0) 2016.04.28
Software Process Model  (0) 2008.09.28
합병정렬 - 알고리즘  (0) 2008.09.21
퀵소트 - 알고리즘  (4) 2008.09.21
임베디드 시스템과 임베디드  (0) 2008.09.15
Embedded에서 ARM의 의미  (0) 2008.09.15
운영체제의 종류  (0) 2008.09.15
프로그래밍언어론 - 용어  (0) 2008.09.03
cache 적중률  (1) 2008.08.31
cache memory - 2  (0) 2008.08.31