좋은 프로젝트를 선정하는 방법?

카테고리 없음 2014. 2. 9. 14:55

좋은 프로젝트는 학습, 경험, 소비자가 좋아할만한 경험을 바탕으로 작성되어야 합니다.

애플의 아이폰과, 삼성의 갤럭시 시리즈를 보면 성능 면에서는 삼성의 갤럭시가 앞도적으로 우세합니다. 하지만

아이폰과 갤럭시는 비슷한 판매 실적을 올리고 있습니다.

 

여기서 보면 성능, 퍼포먼스 만으로는 승부하지 않는 것이 좋다는 지식을 얻을수 있습니다.  사용자가 필요한

기능에 초점을 맞추고, 본래의 기능을 충실히 수행하는 것 만이 사용자가 원하는 것임을 알수 있습니다.

어떤 분야에서 혁신적인 아이디어가 나와 기존의 기술을 덮어 버릴때 기존 사람들은 기존 기술의 불편함을 모르고

사용하다가 새로운 기술을 사용해보고 기존의 기술이 불편했음을 느끼는 경우가 많습니다. 예를 들면 옛날에는

문 키가 없으면 집에 들어가지 못해 기다려야 했지만, 당연하다고 여겼고, 현재는 문키를 번호키가 대신해 번호만

알아도 문 안으로 들어갈수있습니다. 기존의 기술이 불편하다고 생각하지 않고 당연한 결과라고 느꼈던 것입니다.

특정 주제를 선정했을때, 모든 사용자를 만족시키기는 매우 어렵습니다. 특정 사용자에게 초점을 맞추기는 쉽지만,

그 외의 사용자가 사용하지 못해 시장에서 경쟁력이 뒤쳐질 우려가 많습니다. 장단점이 있기 때문에 잘 고려해 선택

해야 할 것입니다.

 

 이를 감안해 주제를 선정했으면 선정한 프로젝트를 한장의 포스터와 15초 이내의 영상으로 표현할수 있고, 기능을

모르는 제 3의 사용자가 그것만을 보고 어떤 것인지 느낄수 있어야 합니다. 세부적으로 추가 설명이 필요할시 좋은 프로

젝트 주제로 선정된 것이 아닙니다. 

 

 기업은 사업성, 공헌성을 목표로 삼기 때문에 사업자에게 이득을 창출해 낼수 있는 교육 SW쪽으로 주제를 선정하는것이

좋을것입니다. 사회에 공헌(장애인, 노약자를 위한 서비스 제공)하는 주제를 선정하면 기업의 주목을 끌수 있을것입니다.

 

[Project Ideation]

주제를 선정하기 힘든 이유는 팀원의 부제, 퍼포먼스의 부족, 기술력 부족, 분량 조절 실패, 이미 나온것이 많음 등 여러

가지 원인이 있습니다. 따라서 아이디어 회의를 하기 위해 모여서 토론하는것보다 일상생활에서 문특 떠로은 item이

더 좋은 프로젝트 주제로 선정되는 경우가 많습니다.  브레인스토밍, 마인드맵, 아이디어 회의 등을 할때 특정 item에

대해 구체화 하는것은 좋지 않습니다. 특정 주제에 대해 구체화 하게 되면 그 주제를 벗어나기가 매우 어렵고 또한

새로운 주제가 떠오르지 않는 경우가 많기 때문입니다.

 

1. 기초적인 아이디어 기입

2. 마인드맵으로 가지치기

3. 아이디어 재정리

4. 다른 사람에게 피드백받기

5. 보고서 작성

 

[브레인 라이팅]

브레인 스토밍은 자유롭게 발언하는 것이 토대가 되어있지만, 실제로 그렇게 하기가 매우 어렵습니다.(일부 사람에게

집중) 그래서 독일을 호리겔은 발언을 하는 대신 종이에 기록하는 방법을 제안했습니다. 다시 말하자면 브레인 라이팅은

참가자들 끼리의 아이디어를 기록하기 위해 비언어적 접근 방법을 사용하는 아이디어 창출기법입니다. 브레인 스토밍

과 비슷하게 참가자들은 문제를 해결하기 위한 아이디어를 생각해 내고, 카드나 종이쪽지를 사용하여 기록한 후 한데

모아서 다른 사람의 것과 교환하여 검토합니다. 이러한 과정을 정기적으로 거치면 참가자들의 사물을 보는 시야의

범의를 높일수 있습니다. 참가자들은 분야는 다르더라도 사안에 관련된 배경지식을 가지고 있어야 합니다. 예를 들면

6명이 둥근 테이블에 둘러 앉아 5분 동안 3가지의 아이디어를 생각하는 방법입니다. 6명이 각각 1장의 종이를 가지고

5분간 3개의 아이디어를 써서 그것을 차례대로 옆사람에게 돌립니다. 30분간 6명이 각각 18개의 아이디어를 기록하므로

총 108개의 아이디어가 탄생합니다.

 

 

 

[연꽃 기법]

연꽃기법은 연꽃 모양으로 아이디어를 발상해 나가는 사고기법입니다. 주로 아이디어나 문제 해결의 대안을

다양한 측면에서 얻기 위하여 활용됩니다. 주로 기존의 기술이나 제품을 활용하여 새로운 방법을 찾으려고 할때나

미래 시나리오를 가상으로 만들어 내려고 할 때 적용됩니다. 연꽃 기법 방법은 3*3 칸으로 된 사각형을 중심으로

주변에는 사각형의 중심에 있는 가운데의 목표를 해결하고자 하는 키워드, 주제를 적습니다. 반복적으로 그 8개에 대한

주제를 또 8개의 키워드로 분할하는 방법입니다. 위의 결과 가운데를 중심으로 하나의 주제에 대한 하위주제의 적절한

아이디어를 조합하여 새로운 최선의 대안을 생각해 낼수 있습니다.

 

 

☞ 연꽃 기법 활용시 유의할점

  1. 비판금지 : 다른 사람들이 제시하는 아이디어를 절대로 평가, 비판, 간섭해서는 안됩니다.

  2. 자유 분방 : 아이디어가 비현실적일지라도 모두 받아들여야 합니다.

  3. 질 보다는 양 : 좋은 아이디어를 얻기 위해서는 가능한 많은 아이디어를 바탕으로 이끌어 내야 합니다.

  4. 결합과 개선 : 두 개 이상의 아이디어를 결합하거나 수정, 추가, 모방해서 새로운 아이디어를 만들수 있습니다.

 

 

 

 

[STL]컨테이너 선택

프로그래밍/C/C++ 2014. 2. 9. 14:12

컬렉션 내의 값들을 어떤 방식으로 접근하는가에 따라 컨테이너 선택이 달라져야 합니다.

 

▶ 컬렉션 내에 임의 접근이 자주 필요할시

    vector와 deque를 사용하고, 순차접근만으로 충분하다면 다른 컨테이너를 써도 무방합니다.

 

▶ 컬렉션 내의 값들을 순서 매길 필요가 있을시

    Set을 사용하는게 좋습니다. 매순간 순서가 필요없고 특정 순간에 필요하다면 list혹은 vector에 값을 대입하고 필요시

    정렬하는 방법을 사용하는 것이 좋습니다.

 

▶ 데이터 구조 내에서 유지되는 값들의 순서가 필요할시

     stack이나 list를 선택하는것이 좋습니다.

 

▶ 실행중에 데이터 구조가 광범위 하게 변활시

    list와 set을 선택하는 것이 좋습니다.  vector, deque는 컬렉션으로 부터 원소들을 제거한 뒤에 데이터 이동이

    이루어지기 때문에 부하의 원인이 됩니다.

 

▶ 어떤 값이 컬렉션 내에 포함되어 있는지 확인하는 빈도가 높으시

    set이나 map을 선택하는 것이 좋습니다.

 

▶ 컬렉션에 대해 인덱싱이 필요할시

    vector, deque를 사용하고, 키 값이 어떤 순서가 있는 데이터 형이라면(문자, 문자열, 사용자 정의 데이터 타입)

    map을 사용합니다.

 

▶ 두개 이상의 수열을 하나로 합치는 일이 자주 발생할 경우

    set이나 list가 유용합니다. 어떤 것을 선택할지는 순서가 유지되는가의 여부에 따라 결정하는 것이 좋습니다.

 

▶ 컬렉션 중간에서 데이터 삽입, 삭제가 자주 이루어질시

    list가 최선의 선택이며, 앞쪽에서 삽입된다면, deque , list 끝에서 삽입과 삭제가 이루어진다면 stack, deque를 사용하는 것이 좋습니다.

'프로그래밍 > C/C++' 카테고리의 다른 글

비트 연산자  (0) 2014.02.12
함수 포인터  (0) 2014.02.12
[STL] 제네릭 알고리즘 Generic Algorithm  (0) 2014.02.09
[STL] 정렬 컨테이너1 (set, multiset, map, multimap)  (0) 2014.02.09
[STL] 제네릭(generic) 기초 정리  (0) 2014.02.09

[STL] 제네릭 알고리즘 Generic Algorithm

프로그래밍/C/C++ 2014. 2. 9. 04:29

Generic Algorithm이란 컨테이너에 대해서 적용할 수 있는 기능들을 체계적으로 정리해놓은 함수를 말합니다. 일반적이

기 때문에, 특정 컨테이너에 종속된 것이 아니라 모든 컨테이너에서 사용할수 있습니다. 알고리즘 함수들은 특정 컨테이

너의 멤버 함수가 아닌 일반 전역 함수로 작성되어 있습니다.

 

  ☞ find 예제

 

  ☞ copy 예제

 

  ☞ sort 예제

  ☞ reverse 예제

 reverse_copy를 사용하면, reverse대상은 그대로 두고 복사시킬수 있습니다.

 → reverse_copy(vec1.begin(), vec1.end(), 참조 객체 );

 

 

[STL] 정렬 컨테이너2 (stack, queue, priorityqueue)

카테고리 없음 2014. 2. 9. 04:12

STL-Stack

 stack의 선언은 두개의 인자를 명시해야 합니다.

 (stack이 담게될 원소의 타입, 원소들을 담는데 사용할 컨테이너 타입)

 

  ☞ stack 생성

    stack<int, vector<int>> stackOne;

    stack<double, deque<double>> stackTwo;

    stack<Part*, list<Part*>> stackThree;

    stack<Customer, list<Customer>> stackFour;

 

컨테이러로는 vector나 deque를 가장 많이 쓰고, List도 컨테이너로 사용이 가능합니다.

deque를 사용할경우 좀더 빠르고, vector를 사용할 경우 크기가 조금 작아집니다.

 

 

STL-Queue

 queue의 선언은 값을 담고 있는 컨테이너와 원소 타입을 명시해야 합니다.

 컨테이너 타입으로 list나 deque를 가장 많이 사용합니다.

 list를 사용하면 코드가 작아지는 반면, deque를 사용하면 코드가 빨라 집니다.

 

  ☞ queue 생성

    queue<int, list<int>>queueOne;

    queue<double, deque<double>>queueTwo;

    queue<Part*, list<Part*>>queueThree;

    queue<Customer, list<Customer>>queueFour;

 

STL-Priority Queue

 queue와 마찬가지로 Priority-Queue에 대한 선언은 값을 담고 있는 컨테이너와 원소 타입을 명시해야 합니다.

  ☞ priority-queue 생성

    priority_queue<int, list<int>>queueOne;

    priority_queue<double, deque<double>>queueTwo;

 

 

[STL] 정렬 컨테이너1 (set, multiset, map, multimap)

프로그래밍/C/C++ 2014. 2. 9. 04:01

▶ STL-Set, Multiset

 Set은 key만을 저장하는 자료구조 입니다.

 Set은 중복되지 않은 key를 저장합니다.(multiset은 중복되지 않은 key를 저장-중복 허용)

 Set에 값을 한번 넣어보는것 만으로 중복된 값이 있는지 찾을수 있습니다.

 

  ☞ Set함수의 생성

    Set<int> a; //오름 차순 정렬

    Set<int, greater<int>> a; //내림차순으로 정렬

    Set<int> a(List.begin(), List.end()); //List를 미리 넣음

    Set<int, greater<int>> a(List.begin(), List.end());

 insert문을 통해 해당 타입에 맞는 값을 넣을수 있습니다.

 find문을 통해 특정 값을 인자로 취해서 set내에 값이 존재하면 그 값의 위치를 반복자를 리턴합니다.

 (없을시 end of set을 리턴)

 

▶ STL-Map, Multimap

 Map은 key와 value 정보를 가지고 있는 자료구조 입니다.

 Multimap은 같은 key로 인덱싱 되는 여러개의 다른 원소를 허용합니다.

 

 Map은 vector나 deque와 같이 인덱싱이 가능합니다.

    map<int, int> myMap;

    myMap.insert(map<int, int>::value_type(5, 7);

    myMap[5] = 7;

    cout << myMap[5];  // -> 7

 Map과 deque, vector 의 차이는 key값이 꼭 숫자일 필요가 없다는 것입니다.

 또한 Map은 정렬된 데이터의 구조를 가지고 있습니다(Tree, hash)

 set과 마찬가지로 insert를 통해 해당 타입에 맞는 값을 넣을수 있습니다.(인덱싱)

 find문을 통해 특정 값을 인자로 취해서 map내에 값이 존재한다면 그 위치를 나타내는 반복자를 리턴합니다.

 (없을시에는 end에 해당하는 반복자를 리턴)

 

 

[STL] 제네릭(generic) 기초 정리

프로그래밍/C/C++ 2014. 2. 9. 03:24

 제네릭이란 무엇인가?

 네이버에서 Generic 이라는 단어를 검색하면

 [문법] 총칭적인

 the generic singular 총칭 단수 <보기 : The cow is an animal>

이라고 검색됩니다. 해석하면 "암소는 동물이다"  소는 분명히 고양이나 개와는 다르지만, "동물"이라는 것으로

총칭할수 있습니다. 그렇다면 왜 총칭하는 것일까요? 어떤 프로그램을 만든다고 할때 어떤 기능이 되야 하는지 고민한뒤

클래스, 맴버함수, 맴버변수등을 작성합니다. 여기서 사용하는 변수의 타입을 총칭화 하면 장점이 있습니다.

1. 템플릿을 이용하면 총칭화된 타입을 사용하는 클래스와 함수를 만들수 있다.

2. 템플릿을 사용하면 타입에 제약을 받지 않은 로직을 기술할수 있다.

그리고 제네릭 프로그래밍을 하기 위해서는 템플릿이 꼭 필요합니다. 그런데 STL은 무엇으로 만들어 졌을까요?

템플릿으로 만들어 졌습니다. STL은 제네릭 프로그램으로 만들어진 가장 대표적인 예중 하나입니다.

두개의 function함수가 있지만, 타입에 따라 다른 함수가 호출됨을 확인할수 있습니다.

첫번째 function함수는 호출1을 출력하고, 두번째 function함수는 호출2를 출력합니다. 

   

         

 

▶ 제네릭을 사용해 펙토리얼 연산

        

 

▶ 제네릭을 사용한 이진수 십진수 변환

     

[STL]기초, 컨테이너(vector, deque, list)

프로그래밍/C/C++ 2014. 2. 9. 03:06

STL이란 무엇인가?

STL이란 C++언어의 "표준 템플릿 라이브러리" Standard Template Library 약자입니다. STL을 간단하
게 말하자면 일반적으로 많이 사용되는 자료구조와 알고리즘을 모은 라이브러리입니다.

 

 

STL은 대부분 알고있는 자료구조와 알고리즘을 제공합니다.

 

컨테이너(Container) 에서는 시퀀스 컨테이너(sequence container)와 정렬 연관 컨테이너가 있습니다.

시퀀스 컨테이너는 Vector, List, Deque 가 있고, 정렬 연관 컨테이너는 Set, Multiset, Map, Multimap이 있습니다.

시퀀스 컨테이너는 index들의 동일한 형식의 객체들이 선형적으로 연결되어 있습니다.

 

 

▶ 시퀀스 컨테이너의 멤버함수

assign

특정 원소로 채운다

clear

모든 원소를 지운다 

swap

두개의 컨테이너 원소를  바꾼다

empth

아무것도 없으면 true 반환 

begin

첫번째 원소의 반복자 반환 

front 

첫 번째 원소의 참조를 반환 

end

마지막 원소의 반복자 반환 

 back

마지막 원소의 참조를 반환 

 rbegin

역방향의 첫번째 원소 반복자 반환 

 rend

역방향의 마지막 원소 다음의 반복자를 반환 

 size

원소의 개수를 반환 

 reserve

지정된 크기만큼의 공간을 확보 

 resize

컨테이너가 담을수 있는 개수를 지정 

push_back 

마지막에 원소를 추가 

 pop_back

마지막 원소를 삭제 

 insert

특정 위치에 원소를 삽입 

 erase

특정 위치의 원소나 지정범위 삭제 

 

▶ 시퀀스 컨테이너의 선언과 초기화

디폴트 생성자 : deque<int>myD;

원소의 개수를 지정 : deque<int>myD(10);

원소의 개수와 값을 초기화 : deque<int>myD(10, 3);

 

▶ STL-Vector

 선형 구조의 가변 배열 방식입니다.

 동일한 형식의 객체를 계속 넣을수 있습니다.

 요소의 개수에 따라 자동으로 메모리 관리를 합니다.

 

☞ vector 예제

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

▶ STL-Deque

 deque는 double ended queue의 줄임말입니다.

 두개의 key를 두어 앞과 뒤를 관리하여, FIFO와 LIFO를 모두 사용할수 있습니다.

 

Vector와 Deque의 단점은 중간의 삽입과 삭제를 수행시 데이터 이동이 있다는 것입니다.(일종의 행렬)

    삽입과 제거가 빈번한 알고리즘에서는 벡터보다는 리스트를 쓰는것이 좋습니다.

 

▶ STL-List

 각 노드는 링크(포인터)로 연결되어 있습니다.

 iterator(반복자)를 사용해 탐색이 가능합니다.

 ☞ List의 단점은 중간에 원소에 접근이 불가능하고, 탐색시 처음부터 검색해야 한다는 점입니다. 

     탐색이 많은 경우 List보다는 Vector혹은 Deque를 쓰는것이 좋습니다.

 

   <List의 탐색>

     List<int>::iterator itr;

     for(itr = myList.begin(); itr != myList.end(); itr++)

     cout << *itr;

 

 List는 sort(정렬)을 지원합니다. [qsort사용불가]

     List.sort(); //오름차순 정렬

     List.sort(greater<T>()); //내림차순 정렬