2015.05.07 15:16

수학은 순수 수학(pure)나 응용수학(applied)나 모두 data를 이해하고, logic을 짜는데 더할 나위 없는 도움이 된다고 생각하고 있지만, 실제 '하드웨어'와 '컴파일러'를 이해하기 위해 컴퓨터공학에 대한 공부가 필요하죠. '수학적인 논리(logic)와 공식(formula)를 '코드'로 파싱하는 방법론에 대해서는 계속해서 공부해야 하는 성질이 아닐까 생각되어요.

프로그래밍을 크게 두 가지 성질로 나누면,

  1. 논리(logic)를 생각하는 방법 (알고리즘 혹은 수학적 사고)

  2. 하드웨어/운영체제를 포함한 플랫폼에 대한 이해

이렇게 보고 있는데, 수학은 1)번에 대해서는 무엇보다도 큰 힘이 됩니다. 2)번은 수학을 베이스로 깔고, 따로 공부하셔도 되는 부분이구요.

일단 수학(혹은 논리적 사고)을 베이스로 깔고, 프로그래밍을 열심히 공부하시면, 논리(logic)를 나누는 방법, 데이터를 분류한 뒤, 각각에 대해 합리적으로 착안하는 방법 등에 대해 눈을 뜨기 쉬울 겁니다. 또한, 하드웨어의 원리, 운영체제의 동작방식, 네트워크 이론 등 컴퓨터 공학과 커리큘럼에 포함된 다양한 과목(혹은 분야)에 대한 지식을 함께 공부하셔야 프로그래밍을 잘 할 수 있습니다.


Posted by 善 곽중선
2015.05.07 15:12

별로 아는 것도 없고, 해본 것도 없지만 어찌어찌 오래 살아남다 보니 이런저런 조언을 해주는 위치에 올랐다. 요즘 같은 시절에 젊은 친구들에게 가장 애타는 문제는 취업 문제이니, 공부 방법에 대한 도움보다 '어떻게 취업을 준비하는가?' 에 대한 도움을 간절히 요청하는 경우가 많다.

이런 저런 경험을 바탕으로 기술 면접을 준비하는 자세라거나, 자기소개서 쓰는 법, 프레젠테이션 하는 방법 등에 대해서 나름 실전 경험을 고스란히 전해 주는데 세상사 맘대로 되는 일이 얼마나 되겠는가? 방금 대학원 졸업한 후배가 면접 본 지 몇 주가 지나서야 최종 불합격 되었다고 연락 왔다.

정말 중요한 것은 최선을 다했는가? 아니면, 부족한 점이 있었는가? 자기 반성이나, 노력 유무가 아니라고 생각한다. 씁쓸하지만, '선배님 소주 한 잔 사주세요' 라고 말할 수 있고, 또 그걸 들어줄 사람이 있느냐 하는 것이다.

다들 열심히 산다, 맘대로 안 될 때도 있다. 이러한 좌절의 순간이 그저 악몽이 되고 말 것인지, 아니면 먼 훗날 소주 한 잔의 추억이 될런지는 우리 곁에 누군가가 있으냐에 따라 달라진다. 이러나 저러나 인생이나, 忍(참을 인)生 으로 살 것인가? 아니면 人(사람 인)生으로 살 것인가?


Posted by 善 곽중선
2015.05.04 16:05

AlgoSpot Quiz '사각형 그리기 (DRAWRECT)' 문제 풀이.


▶ DRAWRECT 문제 분석


- input       : 입력의 첫 행은 T 값이며, 테스트 케이스(test case)의 갯수이다. 

                 나머지 입력은 x, y 좌표 값을 공백으로 구분한 행들이며, 3 * T 갯수 만큼 입력된다.

- processing : T 만큼 반복하면서, 3개의 2차원 좌표를 이용해 마지막 좌표를 계산한다.

- output     : 계산된 마지막 좌표를 출력한다.


입력 값의 범위와 유형은 아래와 같이 표현할 수 있습니다.




▶ 문제 분할

문제 자체가 복잡하지 않기 때문에 세밀한 문제 분할은 필요가 없습니다.


▶ 핵심 논리 구성

4개의 점 중에서 하나가 누락될 경우, 3개의 점으로 구성할 수 있는 경우의 수를 구해 봅니다. 수학의 '조합(combination)'을 활용하면 되겠습니다. 조합(Combination)이란, 서로 다른 개 중 순서를 무시하고 개를 택하는 것이며,  기호로 나타냅니다.



조합을 이용해 4개의 점 중에서 3개의 점을 순서를 구분하지 않고 선택하는 경우의 수를 계산하면, 아래와 같습니다.



4개의 경우의 수를 표 형태로 표현해 보면 다음과 같습니다.


 조합

 Case #1

Case #2 

Case #3 

Case #4 

 좌표

 p1 (x1, y1)

 p2 (x2, y1)

 p3 (x1, y2)

 p1 (x1, y1)

 p2 (x2, y1)

 p4 (x2, y2)

 p1 (x1, y1) 
 p3 (x1, y2)
 p4 (x2, y2)
 p2 (x2, y1)
 p3 (x1, y2)
 p4 (x2, y2)

 비고

 p4 제외

 p3 제외 

 p2 제외  p1 제외 


위 표를 통해 얻을 수 있는 핵심 논리는 아래와 같습니다.


직사각형의 3개의 점(point)가 입력되었을 때, x와 y 좌표는 항상 2개는 같고 나머지 하나는 다르다.

다른 값을 가지는 2개의 x, y 좌표 값을 결합하면 4번째 좌표를 얻을 수 있다.


▶ 플랫폼 문제 해결

본 문제는 플랫폼 문제를 해결할 필요가 없습니다.


▶ 핵심 정리

알고리즘 문제 해결을 위해 가장 좋은 도구는 '수학'입니다. 또한, 문제를 풀기 위해서 좌표계 등의 시각적인 도구를 활용하면, 직관적으로 문제를 이해하는데 있어 큰 도움이 됩니다.

Posted by 善 곽중선