2011년 2월 2일 수요일

파장을 일으키는 7개의 기업

- MBC스페셜에서 안철수교수님 말씀중 -
"세계적인 기업 Google에서 다음 7개 기업으로 빠져나가는 인재를 잡기 위해  연봉 10% 인상을 해줘도 막을 수 없다고 한다. 하지만 우리는 이 Google에 들어가고 싶어 안달이다."라고 했다.

그럼 그 7개 기업은 무엇일까? 뭐하는 회사인지 정도는 알아 놓자.


1. Facebook (http://www.facebook.com/)

 - 모르면 간첩... 부모님 세대라면 모를지도... (필자는 20대) , 제발 세상 돌아가는 것에 관심좀 갖자...  트위터와 함께 대표적인 미국의 SNS회사,  얼마전 시가총액이 미국의 대표적인 인터넷 마켓인 아마존을 추월했다.

 - 1번과 공감이다.

본인이 뉴스를 자주 안보더라도 주변에 유행을 좋아하는 친구정도만 있어도 위의 2가지는 알 것이다. 그럼 나머지 5개를 조사해보자.



3. Foursquare(http:/foursquare.com)

 위치기반 SNS 서비스 제공. User가 핸드폰 혹은 GPS가 있는 단말기를 통해 포스퀘어 App을 설치후 해당 건물, 거리에 자신의 발자취를 간단한 메시지와 함께 올릴 수 있고 친구들과 공유할 수 있다. 각 위치마다 Mayer라고 칭하는 대장(?) 터줏대감이 있는데, 그 지역에 정기적으로 자주 방문해서 발자취를 남기면 얻을 수 있다. 그외에 특정 조건을 만족하면 배지를 받을 수 있는데 이것도 하나의 재미로 여겨진다. 무엇보다도 타 SNS와 연동으로 편하게, 개방적으로 이용할 수 있는 게 장점. 이 회사도 필자는 이미 알고 있고 사용중인 SNS이기때문에 아는만큼만 적었다.


 구글의 60억달러 인수제안을 거부했다는 뉴스를 보고, 소셜커머스 업체라는 사업종류만 알고 있던 회사. 티켓몬스터를 필두로 파죽지세처럼 번져가는 소셜커머스가 무엇인지모른다면 그정도는 검색으로 꼭 알고 넘어가자. (본인의 경제력을 위해서도 그게 좋다.)
필자는 이 회사까지 딱 4개를 알고있었다.





이제 모르는 회사들은 검색으로라도 간단히 알고 가자.(Trend정도는 따라가야 않겠는가?)


  SNG게임개발업체, 미국에서도 굉장히 부상하고 있는 기업이며 검색해보니 최근에 9개의 게임제작 기업을 인수했다고 한다. 그리고 현재 facebook에 상위 랭킹되어있는 SNG는 대부분 이 업체에서 개발했다고 한다. 징가의 자산가치가 55억1000만달러로 EA를 앞지르고 세계 2위 게임업체가 되었다. (1위 업체는 블리자드)


6. Blippy (http://bilppy.com/)

  사용자가 신용카드로 구매한 내역을 친구들과 공유하는 SNS. 설립자 카플란은 많은 미국인들이 두 개 이상의 신용카드를 가지고 있다는 사실을 언급하며, "블리피에 등록된 신용카드로 스타벅스에서 커피를 산다면 바로 당신의 친구들이 당신이 스타벅스에 있다는 것을 알게될 것이고, 필요하면 스타벅스로 올 수도 있다. 사적인 용도로 사용하려면 등록되지 않은 나머지 카드를 사용하면 된다"라고 설명했다. 트위터와 마찬가지로 친구를 찾아 팔로우 할 수 있고, 자신이 팔로우한 사람의 물건구입을 알 수 있다. 물론 정보의 공개는 승인된 사람에게만 한다. 또한 아이튠즈나 아마존 구매내역과 같이 특정항목만 선택적으로 공유도 가능하다. 금융정보 노출에 대한 우려는 비공개 설정가능으로 일축하고있다. 공식오픈한지는 만1년정도 지났다.

7. YCombinator (http://ycombinator.com/)

 
회사라기 보다는 미국의 벤처기업 지원 프로그램? 프로젝트라고 표현하는게 더 맞는것 같다. 초기 단계의 벤처 투자에 특화된 새로운 형태의 업체. 주로 소프트웨어와 웹 서비스관련 업체에 투자한다. 기본적인 목표는 큰 규모의 투자를 달성하기 위해 필요한 위치에 도달할 수 있도록 지원하는 것. 초기에 $20,000 이하의 소규모 투자를 하고 기업지분의 2~10% 취득, 그 외에도 벤처 아이디어에 대한 공동작업 및 투자/인수자와의 계약, 법적 검토 지원. 유명 벤처 창업자, 금융가, 변호사, 회계사와의 만남주선으로 비즈니스  네트워크 형성을 돕는다.
벤처회사의 아이디어와 비전을 보고 사업 초기에 만나는 어려움을 돕는 대가로 쌀때 투자하는 형식의 투자회사라 생각한다.


세계적으로 이런 사업 비즈니스를 가진 회사들이 파장을 일으키고있다.
다행인지 불행인지, 세계적인 이런 파장이 일면 예전에는 5년 요즘은 1년 후면 우리나라에도 boom이 일어난다. 국내 유행에 민감한 사람이라면, 이제 해외를 둘러보고 우리나라 실정에 맞게 변화해서 시도해보자. 그렇게 까지 못하면 그런 곳에 투자라도 하자.

미래를 보는 안목을 길러야 살아남는다.







Google code jam 2010 Qualification Round : Problem C

Problem :  http://code.google.com/codejam/contest/dashboard?c=433101#s=p2


B번 문제에서 그렇게 해석에 애먹고 고생해서 그런지, 이번문제는 5분만에 읽고 해석 및 solution이 떠올랐다. 하지만, 세상에 쉬운일이 없듯이 이번 문제는 [효율]의 문제다.
그리고 또다시 부상한 Big Integer Class -_-+...


접근방법
문제를 읽은 후 사고의 흐름은 이렇다.
1. 배열로 그룹잡고 줄 빠지면 빼서 뒤로 넣고, 빼서 뒤로 넣고 하면되겠네.. 그런데 너무 삽질 같다?

2. 아, 그럼 STL의 위엄을 발휘해서 List로 하면 pop(), pushback()하면 편하겠다. 이렇게 해볼까?

3. 가만... 이거 1번 Riding할때마다 이렇게 수정해버리면 Overhead가 심해서 Complexity가 너무 올라가는데?.;;;

4. 아! 각 위치마다 시작지점과 버는 돈을 Hash Table로 만들어서 참조만 하면 효율이 확 올라가겠다!

5. 구축해놓고 참조만 할거니까, 컴퓨터적으로 조금 더 빠른 Array 2개를 이용하자!!

// next, earn 동적 배열을 채우는 루틴
  for(int i=0; i<numOfGroup; i++)
  {
   int sum=0;
   // cnt는 모두 태우고 남는 경우를 처리해주기 위함.
   for(int j=i, cnt=0; ; j++, cnt++)
   {
    if( j== numOfGroup) j=0;
    if( sum+group[j] <= canBoard && cnt!=numOfGroup)
    {
     sum += group[j];
    }
    else
    {
     next[i] = j;
     earn[i] = sum;
     break;
    }
   }
  }
 
  // solution 도출
  int forward=0;
  for(int i=0; i<numOfRide ; i++)
  {
   income += earn[forward];
   forward = next[forward];
  }

C++ Big Integer Class 구현

code jam 문제를 풀다가 두고두고 쓰면 좋을 것같아서 class file을 만들었다.
하지만 허접하게 구현해서 몇가지 제약사항이 있다.

<주의사항>
1. 뺄셈 operator 사용시 호출인자가 더 큰값이어야 한다.(아닐경우 unhandling)
2. 나눗셈 미구현

#include<string>
#define SIZE 100

using namespace std;

class BigInteger
{
private:
 string num;
 int range; //배열사용범위 표시
 int number[SIZE]; // 배열 1칸에 4자리의 숫자(0001~9999)가 들어간다
 int go_up[SIZE+1]; // 사칙연산 후 올림을 위한 수가 저장된다.

public:
 BigInteger(string n);
 string getNum();
 int* getNumber();
 int getRange();
 void operator+(BigInteger bi);
 void operator-(BigInteger bi); //앞의 인자(호출인자)가 무조건 크다는 전제
 void operator*(BigInteger bi);
 void operator/(BigInteger bi); //미구현
};

BigInteger::BigInteger(string n)
{
 memset(number,0,sizeof(int)*SIZE);
 memset(go_up,0,sizeof(int)*SIZE);
 num = n;
 int insert0 = n.size()%4;
 string tmp;

 for(int i=0; i<(4-insert0); i++)
 {
  n.insert(0,"0");
 }
 int index = (n.size()-1)/4;
 range = index;
 for(int i=0; index>=0;i++, index--)
 {
  tmp = n.substr(4*i,4);
  number[index] = atoi(tmp.c_str());
 }
}
int BigInteger::getRange()
{
 return range;
}
int* BigInteger::getNumber()
{
 return number;
}
string BigInteger::getNum()
{
 string largeNum;
 char tmp[5];
 for(int i=0; i<=range; i++)
 {
  itoa(number[i],tmp,10);
  largeNum.insert(0,tmp);
 }
 return largeNum;
}
void BigInteger::operator+(BigInteger bi)
{
 int index = range;
 int* big = bi.getNumber();
 if(bi.getRange()>index) 
  index=bi.getRange();
 
 for(int i=0; i<index; i++)
 {
  number[i]= number[i] + big[i] + go_up[i];
  go_up[i+1] = number[i]/10000;
  number[i] = number[i]%10000;
 }
 //range 재조정
 for(int i=SIZE-1; i>=0; i--)
 {
  if(number[i]>0)
  {
   range=i;
   break;
  }
 }
 memset(go_up,0, sizeof(int)*100);
}
// 뺄셈시 앞의 big Integer가 무조건 크다는 가정임
void BigInteger::operator-(BigInteger bi)
{
 int index = range;
 int* big = bi.getNumber();
 if(bi.getRange()>index) 
  index=bi.getRange();
 
 for(int i=0; i<index; i++)
 {
  number[i]= number[i] - big[i];
  if( number[i] < 0) // 앞의 자리수에서 하나 꾸어 옴.
  {
   number[i+1]--;
   number[i] = number[i] + 10000;
  }
 }
 //range 재조정
 for(int i=SIZE-1; i>=0; i--)
 {
  if(number[i]>0)
  {
   range=i;
   break;
  }
 }
}
void BigInteger::operator*(BigInteger bi)
{
 memset(go_up,0, sizeof(int)*100);
 int index = range;
 int* big = bi.getNumber();
 int tmp[100];
 if(bi.getRange()>index) 
  index=bi.getRange();
 
 for(int i=0; i<range+1; i++)
 {
  for(int j=0; j<bi.getRange()+1; j++)
  {
   tmp[j] = number[j] * big[i];

   go_up[i+j+1] += (tmp[j]+go_up[i+j])/10000;
   go_up[i+j] = (tmp[j]+go_up[i+j])%10000;
  }
 }
 memcpy(number,go_up,sizeof(int)*100);
 //range 재조정
 for(int i=SIZE-1; i>=0; i--)
 {
  if(number[i]>0)
  {
   range=i;
   break;
  }
 }
 memset(go_up,0, sizeof(int)*100);
}

2011년 2월 1일 화요일

2006년 박경철 부자경제학 강의 요약.

감명깊게 보고 뜻하지 않게(?) 요약 동영상 편집을 했다.
안목을 기르기 위한 자기반성부분은 두고두고 다시 봐야겠다.
..;;


 : 투자전략 수립시 고려할 중요변수
 : 지속가능한(안정적) 수익률, 복리효과, 투자자산의 평균으로 회귀
 : 투자 수단의 평균 회귀

 


 : 부가가치가 있는 투자를 할 것
 : 초심자의 행운
 : ELS상품의 구조와 재테크 (철저한 리스크 관리의 중요성)


 : 직관과 영감에 과감한 투자, 미래의 비전을 보는 안목을 기르고 있는가 자기반성
 : 총정리

Euclid greatest common measure

1)유클리드의 호제법이란?
유클리드 호제법이란 최대공약수를 쉽게 구하는거예요.
예를들어 A = BQ + r
q 는 quoto 인가? 몫을 저렇게 사용하구요 r 은 나머지구요. ^^
이럴때 A 는 피젯수 , B 는 젯수라고 해요. 자, 이제 본론으로들어갑시다.
유클리드 호제법이란 A 와 B 의 최대공약수는
B 와 r 의 최대공약수와 같다는거예요.
예를들어 94 = 6 x 15 + 4
여기서 94와 6의 최대공약수는 2라는 것이죠.
마찬가지로 6과 4의 최대공약수는 2에요
응용으로 4389 와 2299 의 최대공약수는?
여기서 4389 = 2299 x 1 + 2090
2299 와 2090 의 최대공약수
2299 = 2090 x 1 + 209
2090 과 209의 최대공약수는 209 가 되겠네요 ㅋ

2)유클리드 호제법의 기본적인 원리
자연수 A , B 에 대하여 A 를 B 로 나누었을 때의 몫을 q ,
나머지를 r 이라 하자.
A , B 의 최대공약수를 x 라 하면 A = a'x 15 = 3 x 5 이고
최대공약수가 5일때 a'란 3이되겟죠.
B = b'x ( a' , b' 는 *서로소 { 이유는 최대공약수로 곱해졋으니 남은 곱해
지는수들은 더이상 나누어 지지 않아야겟죠} )
*relatively prime : 1 이외에 공약수를 갖지 않는 두 자연수를 말한다.
r = (a' - b'q)x 이유는 A = BQ + R 에서 a'x = (b'x)q + r 이고
r 은 a'x - b'xq = (a' - b'q ) x
따라서 A , B 의 최대공약수 x 는 B와 r 의 공약수다.
B 와 r 의 공약수인 이유는 아시겟죠?
r = ( a' -b'q)x 이고 B = b'x 잖아요 여기서 공통으로 x 가 들어가있네요.
그런데 a' , b ' 이 서로소이면 b' 와 (a'-b'q) 의 최대공약수는 1이므로
x 는 B 와 r 의 최대공약수이다.
따라서 . a,b 의 최대공약수는 b 와 r 의 최대공약수이다

출처 : 네이버지식인