Exhalation 숨 - 테드 창 - SF 소설 단편집

철학적인 요소들이 풍부한 테드 킴의 SF소설. 여러 단편들이 모여 있어서 조금씩 시간을 내어 읽기에 좋았다. 맨 마지막에 각 작품에 대한 저자의 생각을 담은 후기가 등장하는데, 스스로 작품을 이해해본 뒤에 자신의 생각과 비교해보자. 상인과 연금술사의 문 ‘연금술사의 문’을 매개로 한 시간여행물. 단, 문을 만들기 이전의 과거로는 가지 못한다는 전제가 깔려있다. (왜냐하면 그 이전에는 문이 존재하지 않았으니까!) 연금술사는 과거에 가고 싶어하는 한 방랑자에게 이런 말을 남긴다. ‘과거나 미래로 가더라도 정해진 현실은 뒤바꿀 수 없으며, 자신이 한 행동은 궁극적으론 큰 흐름 속 한 부분에 불과하다’고. 알라 신의 섭리, 혹은 이 평행세계에서 바꿀 수 없는 정해진 운명이기에 우리는 그것을 거스를 수 없다고 말이다. 한마디로 ‘일어날 일은 일어난다’ 작가는 ‘운명’이라는 개념을 믿는 듯하다. ...

2023-8-24 · 4 min · 800 words · Junha

백준 1931번 - 회의실 배정

백준 1931번 문제 바로가기 문제를 잘못 이해하는 것에서부터 풀어내는 데에 시간이 꽤나 많이 걸렸던 문제. 처음에는 여러 개의 회의실로 착각해서 아예 풀이 방향이 달랐고, 다음에는 “모든 경우의 수를 고려해야하나?” 고려하다보니 문제를 푸는 것이 어려웠다. 이 문제를 해결하는 방법의 주요 포인트를 시작시간이 아닌 종료 시간을 기준으로 정렬하자는 것이었다. 종료 시간을 기준으로 정렬하게 되면 같은 시간대에 최대한 많은 횟수의 회의를 열 수 있기 때문이다. 지금까지 풀어온 greedy 문제와는 결이 조금 달라서 당황을 많이했는데, 경험치를 더 늘려나가자! ...

2023-8-23 · 1 min · 137 words · Junha

너의 이름은 - 신카이 마코토

영화관에서 본 첫 일본애니, 너의 이름은. 소설 버전으로도 있길래 반가워서 단숨에 읽어냈다. 도쿄에 사는 바쁜 고등학생 타키와 시골에서 상경을 꿈꾸는 소녀 미츠하의 러브 스토리는 우리에게 감동을 주었다. 글로 읽는 “너의 이름은”에서는 영상에서 찾지 못한 감동을 행간에서 찾아낼 수 있었다. 우리는 기억이 있기에 하루하루가 소중한 것이고, 그런 기억중에서도 소중한 것은 ‘추억’이라는 이름표를 붙여준다. 하루의 일과가 힘들었더라도 옛 기억을 공유하는 친구와 이야기하면 싹 풀리는 것처럼, 기억은 우리가 살아가는데 큰 힘이 되어준다. 현재 우리가 누구인가는 이런 기억들이 정의하는 것이라고도 할 수 있다. 타키는 이런 ‘기억’에 대해 다음과 같은 의문을 남긴다. ...

2023-8-22 · 2 min · 259 words · Junha

백준 14940번 - 쉬운 최단거리

백준 14940번 문제 바로가기 C++로 풀어보는 첫 bfs문제! python와 비교했을 때에 정의하는 방식만 다르지, 전체적인 구조는 동일해서 쉽게 익힐 수 있었다. 가장 헷갈렸던 부분은, deque을 정의하고 “좌표를 어떻게 전달할 것인가"는 문제였다. python같은 경우 tuple로 간단하게 전달하면 되지만, {x, y}로 전달하면 C++에서는 에러가 발생하기 때문이다. 다른 사람들의 bfs 구현 방식을 참고했는데, 대부분 pair 기능을 이용해서 좌표를 전달했다. make_pair(x, y)로 전달하면 마치 tuple 마냥 전달해줄 수 있다. 다시 그 값을 불러올 때에는 .front .second 처럼 점 연산자(.)를 통해 알아낼 수 있다. ...

2023-8-22 · 2 min · 322 words · Junha

백준 2630번 - 색종이 만들기

백준 2630번 문제 바로가기 재귀 혹은 분할정복(Divide & Conquer) 문제인데, 은근 시간이 오래 걸렸다. 재귀 아이디어는 금세 나왔는데, 소소한 기본이 이슈가 있어서 자꾸만 문제를 다시 풀게 되었다. 처음에는 2차원 vector을 이용해서 풀었는데, size가 커지면 에러가 발생했다. 알고보니 vector을 함수의 인수(parameter)로 넘겨주면 그때마다 vector가 복사되기 때문에, 시간 초과가 발생할 수 있다. 이를 막기 위해서는 참조사를 이용하거나, int paper[128][128]처럼 int 배열을 이용해야한다. #include <iostream> using namespace std; int n_0 = 0; int n_1 = 0; int paper[128][128]; void epoch(int size, int x, int y){ int n_sum = 0; for (int i=x; i<x+size; i++){ for (int j=y; j<y+size; j++){ if (paper[i][j] == 1){ n_sum ++; } } } if (n_sum == size*size){ n_1 ++; } else if (n_sum == 0){ n_0 ++; } else{ size /= 2; epoch(size, x, y); epoch(size, x+size, y); epoch(size, x, y+size); epoch(size, x+size, y+size); } } int main() { int size; cin >> size; for (int i=0; i<size; i++){ for (int j=0; j<size; j++){ cin >> paper[i][j]; } } epoch(size, 0, 0); cout << n_0 << endl << n_1; return 0; }

2023-8-22 · 1 min · 174 words · Junha