목록전체 글 (36)
일상

요 근래에 브래드 피트가 나온 영화들을 자주 보고있다. 조 블랙의 사랑도 이 흐름으로 본 영화인데 브래드 피트의 젊은 시절을 보기 위해 본 영화이지만 어느새 안소니 홉킨스가 연기한 빌에 대해 빠지게 되었다. 영화에서 빌이 하는 말들이 나에게 깊게 다가왔다. 진정한 사랑을 찾고 싶다면 노력해야한다는 것, 자신은 행운이 가득한 삶을 살았고 다른 사람들도 아침에 일어났을 때 "더 바랄게 없다" 라는 생각이 들었다면 좋겠다는 것 등 영화를 다 보고 난 뒤, 앞으로의 나의 인생에서도 어느 날 아침에 일어났을 때 "더 바랄게 없다" 라고 생각이 들 수 있도록 빌 처럼 충실한 삶을 살아야겠다 라고 다짐했다. 그리고 그런 삶은 저절로 찾아오지 않으므로 열심히 노력해야겠다.

스티븐 호킹에 대한 전기 영화. 영화를 보다가 마음이 아픈 장면들이 많았다. 장애인과의 사랑을 다룬다는 점, 그리고 현실적인 모습도 보여준다는 점에서 조제, 호랑이 그리고 물고기들과 비슷하지만, 이 영화는 조제와 다르게 중반부터 장애인과의 사랑의 현실적으로 힘든 점들을 보여주고 그 이후의 상황들을 보여주는데 이 때문에 보기가 매우 힘들었다. 그래서 영화 중반부터는 집중이 깨졌고 어거지로 결말까지 겨우겨우 봤다. 보기 힘든것과는 별개로 영화의 깊이가 얕은 느낌을 받았다. 스티븐 호킹의 업적들에 대한 것들, 장애인과의 사랑에 대한 것들을 다 다루려고 하다보니 이런 느낌을 받은게 아닐까 생각된다. 그래도 딱 하나 좋은 점이 있다면 스티븐 호킹을 연기한 남배우의 연기가 너무 훌륭했다는 것이다. 스티븐 호킹을 연..
풀이 이 문제는 언뜻 보면 이중 반복문을 이용해서 쉽게 풀 수 있을 것 같지만, 이렇게 할 경우 복잡도가 n^2가 되며, 시간 초과로 실패를 하게 된다. 따라서 이 문제는 스택을 이용해서 풀어야 한다. 스택을 이용할 때 핵심은, 스택에 저장되는 요소는 숫자가아니라 숫자를 나타내는 인덱스 라는 것이다. 풀이는 코드와 함께 보면 좋을 것 같아서 소스코드의 주석으로 달아놓았다. c++의 경우 std::vector를 마치 스택처럼 이용할 수 있기 때문에 vector를 이용하였다.#include #include int main() { std::ios::sync_with_stdio(false); std::cin.tie(NULL); int n; std::cin >> n; // 순열을 받을 array 선언 in..
풀이 제목에 나온대로 스택을 이용하여 풀어야 하는 문제이다. 문제에 대한 이해는 해당 문제 홈페이지의 힌트를 보면 어느정도 감이 잡히니 그것을 읽어보자. 이 문제의 경우 소스코드를 바탕으로 풀이하는게 좋을 것 같아서 먼저 소스코드를 첨부한다. 소스코드는 다음과 같다. #include #include #include template class Stack {private: std::vector s;public: void Push(S data) { s.push_back(data); } S Pop() { if (s.size() == 0) { return S(-1); } else { S temp = s[s.size() - 1]; s.pop_back(); return temp; } } int..
사실 이 문제의 풀이라기 보다는 이 문제에서 무조건 이용해야하는 에라토스테네스의 체 에 대한 풀이이다. 소수 관련 문제인데 시간제한이 타이트하면 무조건 에라토스테네스의 체를 생각하면 된다. 이 문제도 에라토스테네스의 체를 이용해서 풀어야 한다. 에타로스테네스의 체는 원하는 숫자의 범위 내에 소수를 판별할 수 있는 가장 빠른 방법이다. 가령 [1, 100] 범위 안의 소수를 알고 싶다면, 1에서 100까지의 숫자를 나열한 후 2의배수, 3의배수, 5의 배수, 7의 배수, ... , 10의 배수(100의 제곱근)에 대해서는 소수가 아니라고 표시하면 된다. 4의 배수, 6의 배수, 8의 배수, 9의 배수는 앞에서 2의배수, 3의배수에서 모두 아니라고 표시되므로 굳이 안해줘도 된다. 좀 더 일반적으로 정의하면..
풀이 풀이 과정은 크게 3단계로 나눠서(1). 문자열로 입력을 받고(2). 문자열 요소를 int 변환 후 각각의 요소에 대해 2진수를 구한 뒤(3). 첫번째 수가 1부터 나오게 만들기로 하였다. 먼저 코드를 써보면 #include #include int main() { std::string s; std::cin >> s; int oct_num; int binary[3] = { 0 }; for (int i = 0; i = 0) { binary[j] = 0; j--; } for (int k = 0; k 여기서 애먹은 단계는 2단계여서 2단계 풀이에 대해서만 좀 더 써 보면, 우선 2단계 구현의 경우 첫번째 for문과..
풀이 예를 들어, 2층 3호의 거주민 수를 알고 싶다면 0층의 1호 ~ 3호의 거주민 수, 1층의 1호 ~ 3호 거주민 수를 알고 있으면 된다. 즉, k층의 n호의 거주민 수를 알고 싶다면 (k-1)층 까지의 1호 ~ n호 거주민 수를 알고 있으면 된다. 먼저, 동적할당으로 n 사이즈의 배열을 선언 후, 0층의 1호(배열 index : 0)에서 n호 (배열 index : 1) 의 거주민 수를 초기화 한다. 이후 1층부터 K층까지 차례대로 거주민 수를 계산하게 된다 다이나믹 프로그래밍이라는 힌트를 알게되면 무난하게 풀 수 있는 문제이다. #include int main() { int t; //test case num std::cin >> t; int k, n; // k : floor, n : room nu..
풀이 과정 벌집이 생성되는 과정을 풀어보면 1 2, 3, 4, 5, 6, 7 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37 38, 39, ... , 61 1에서 6을 더한 7까지가 거리가 2가 되고 7에서 6의 2배인 12를 더한 19까지가 거리가 3이 되며 19에서 6의 3배인 18을 더한 37까지의 거리가 4가 된다. 이 규칙에 따라서 코딩을 진행하면 된다. 먼저 반복문에 주요한 변수는 num과 i이다. num은 특정 거리에서 맨 마지막 수를 나타낸다고 생각하면 된다. 따라서 계속 누적을 해줘야한다는 것이 핵심이다. i는 거리를 나타낸다고 생..
풀이 - 먼저 총 꼭지점의 개수는 (사각형의 한 면의 꼭지점의 개수) x (사각형의 한 면의 꼭지점의 개수)이다 - 점 하나를 추가한다고 할 때마다 사각형의 한 면의 꼭지점의 개수는 초기값이 1이고 공비가 2인 공비수열의 형태로 늘어난다 - 따라서 이 규칙을 코딩에 적용하면 끝! #include //맨 왼쪽 면의 꼭지 점 개수는 2, 3, 5, 9, 17, 33 순으로 늘어나는데 //이것의 증가폭을 따져보면 1, 2, 4, 8, 16.. 즉 2의 거듭제곱 순으로 늘어난다 //즉 initial value가 1이고 common_ratio가 2인 등비수열 int main() { int n; std::cin >> n; int init = 2; int add = 1; int common_ratio = 1; for..
풀이 사실 문제만 본다면 소스코드를 생각하는것이 쉽지 않다. 이 문제는 이차원 배열을 이용하면 간단하게 풀 수 있는 문제다. 먼저 (100, 100) 사이즈의 0으로 초기화 된 이차원 배열을 선언 후 입력받은 범위에 있는 배열의 element를 1로 만들어준 뒤 이차원 배열에 있는 1 값을 모두 더해주면 답이 나온다. 제출코드 #include int main() { int plate[100][100] = { 0 }; int paper_num; std::cin >> paper_num; for (int i = 0; i > x >> y; for (int j = x; j < x + 10; j++) { for (int k = y; k < y ..