이 책을 읽고자 했던 이유는 한 때 나는 계획이 하나라도 달라지면, 그 하루를 포기해 버리는 나쁜 습관이 있었다.

 

포기하는 순간에는 어쩔 수 없다 생각했지만, 자기전에는 자괴감에 빠지고 내일은 더 열심히 살아야겠다는 다짐을 반복했다. 시간이 지날 수록 스스로가 너무 멍청하고 싫어졌다. 더 이상 이렇게 살면 안될거같아서 시간 관리 책을 읽게 된 것이다. 

 

모든 것이 계획대로 가는 하루라는 거의 존재 하지 않는다.

갑자기 일이 생길 수도 있고, 몸 상태가 갑자기 안좋아질 수도 있다.

 

"메이크 타임" 에서는 하이라이트 라는 개념을 사용해서

오늘 무엇이 가장 빛나기를 바라는가?

에 대해 생각하게 한다.

 

그래서 하이라이트를 정하는 방법, 적용하는 방법 등에 대해 다양한 방법을 설명한다.

 

이 책의 저자는 2명으로 서로에게 맞는 방법이 달라서 두 사람 모두의 방법을 추천해주는 것이 읽는 재미가 있었다.

 

방법이 아주 다양해서 시도해보고 안되면 다른 방법을 시도할 수 있다는 것도 좋았다.

 

지금은 하루를 그냥 보내려고 하지 않으려한다.

 

뒤돌아 보니 당시에는 많이 지쳐서 쉴 시간이 필요했다.

 

그 때, 쉬었으니 지금 이렇게 글을 쓰고 공부를 할 수 있는 힘이 있는 것이라 생각한다.

 

쉬는 것에 대해 너무 주변 시선, 그리고 내가 나를 바라볼 때의 시선이 조금 나아지길 바란다.

 

옛날의 나와 같은 상황이라면 한 번 읽어보는 것을 추천한다.

'책 리뷰' 카테고리의 다른 글

위대한 나의 발견 - 강점 혁명  (0) 2023.07.03

https://www.acmicpc.net/problem/7977

 

7977번: 크리스 마틴

미친 과학자 창호는 어젯 밤 구재현을 납치해서, 구재현의 DNA를 추출했다. 인간의 DNA의 길이는 n이며, A, C, G, T 4개의 염색체로 구성되어 있다. 창호는 매일 자신을 놀리던 구재현을 좋아하지 않

www.acmicpc.net

 

일단 문제를 이해하는 데 오래걸렸다. 

 

이 문제에서 원하는 것은 A,C,G,T 4개로 구성된 유전자에서

가장 적게 겹치는 유전자를 새로 만드는 것이다.

 

가장 적게 겹치는 유전자는 재현이의 유전자에서 가장 적은 염색체를 선택해서

그것을 N만큼 가지는 것이다.

 

답이 여러가지일 경우, 아무것이나 출력 가능하므로 더 편하다.

 

N = int(input())
w = input()
n = "ACGT"
num = [w.count(n[i]) for i in range(4)]
i = num.index(min(num)) //가장 적은 수의 것을 찾기 위함.

print(num[i])
print(n[i] * N)

https://www.acmicpc.net/problem/1926

 

1926번: 그림

어떤 큰 도화지에 그림이 그려져 있을 때, 그 그림의 개수와, 그 그림 중 넓이가 가장 넓은 것의 넓이를 출력하여라. 단, 그림이라는 것은 1로 연결된 것을 한 그림이라고 정의하자. 가로나 세로

www.acmicpc.net

 

[풀이 과정]

 

원하는 답은 그림의 개수와, 가장 넓은 넓이를 구하는 것이다.

BFS (너비 우선 탐색)을 쓰면 된다.

 

import sys
from collections import deque

input = sys.stdin.readline
dx = [1,-1,0,0]
dy = [0,0,1,-1]

def find_draw(Map, q):
    global max_draw
    
    temp = 1

    while q:
        x, y = q.popleft()

        for i in range(4): //상하좌우 확인
            tx = x + dx[i]
            ty = y + dy[i]
            if 0<=tx<N and 0<=ty<M and Map[tx][ty] == 1: //인덱스 넘지 않고, 그림이 있으면
                temp += 1
                Map[tx][ty] = 0
                q.append((tx,ty))
                
    max_draw = max(temp,max_draw)

cnt = 0
max_draw = 0


N,M =map(int,input().split())
Map = [list(map(int,input().split())) for _ in range(N)]

for i in range(N):
    for j in range(M):
        if Map[i][j] == 1:
            q = deque([(i,j)])
            Map[i][j] = 0
            find_draw(Map,q)
            cnt += 1

print(cnt)
print(max_draw)

https://www.acmicpc.net/problem/2993

 

2993번: 세 부분

첫째 줄에 원섭이가 고른 단어가 주어진다. 고른 단어는 알파벳 소문자로 이루어져 있고, 길이는 3보다 크거나 같고, 50보다 작거나 같다.

www.acmicpc.net

 

[풀이 방법]

1. 세 부분으로 나누다. 

2. 나눈 단어를 각각 순서를 뒤집는다.

3. 세 단어를 합친다.

 

브루트 포스로 쪼갤 수 있는 모든 경우의 수로 쪼개고 위의 방식을 반복한다.

쪼갤 때에는 두 개의 포인터가 있다고 생각하고, 앞에서 부터 쪼갤 위치, 뒤에서 부터 쪼갤 위치를 준다.

 

예제에 있는 mobitel을 예시로 들면 다음과 같이 쪼갤 수 있다.

 

단어를 나누는 것과, range 에 대한 index에서 버벅였다.

 

import sys

input = sys.stdin.readline

word = input().strip()
ans = word
n = len(word)


for i in range(1,n-2):                #앞 포인트
    for j in range(n-1,i,-1):       #뒷 포인트
        new = word[0:i][::-1] + word[i:j][::-1] + word[j:][::-1]
        if new < ans:
            ans = new
print(ans)

https://www.acmicpc.net/problem/3085

 

3085번: 사탕 게임

예제 3의 경우 4번 행의 Y와 C를 바꾸면 사탕 네 개를 먹을 수 있다.

www.acmicpc.net

 

[풀이 방법]

 

1. BFS처럼 하나의 점(A)와 각 위,아래,오른쪽,왼쪽 방향 색에서 다른 지점(B)을 확인해서

2. A, B를 서로 바꾸고

3. 연속된 것의 최대 길이를 확인하기

4. A, B를 바꿔서 원래대로 돌려놓기.

 

위의 과정을 반복하는 것으로 생각했다.

 

그런데 위에서 순차적으로 내려오면서 확인하므로, 4 방향을 확인할 필요 없이 아래와 오른쪽만 확인하면 된다.

 

1. BFS처럼 하나의 점(A)와 각 아래,오른쪽 방향 색에서 다른 지점(B)을 확인해서

2. A, B를 서로 바꾸고

3. 연속된 것의 최대 길이를 확인하기

4. A, B를 바꿔서 원래대로 돌려놓기.

 

import sys

input = sys.stdin.readline

#가장 긴 연속 부분 확인
def check(N, M):
    global ans
    for i in range(N): #행 확인
        cnt = 1
        for j in range(N-1):
            if M[i][j] == M[i][j+1]:
                cnt += 1
                ans = max(cnt,ans)
            else:
                cnt = 1
    for i in range(N): #열 확인
        cnt = 1
        for j in range(N-1):
            if M[j][i] == M[j+1][i]:
                cnt += 1
                ans = max(cnt, ans)
            else:
                cnt = 1
                
ans = 1
N = int(input())
Map = [list(input()) for _ in range(N)]

for i in range(N):
    for j in range(N):
        #열바꾸기
        if j+1 < N:
            Map[i][j], Map[i][j+1] = Map[i][j+1],Map[i][j]
            check(N,Map)
            Map[i][j], Map[i][j+1] = Map[i][j+1], Map[i][j]

        #행바꾸기
        if i+1 < N:
            Map[i][j], Map[i+1][j] = Map[i+1][j], Map[i][j]
            check(N,Map)
            Map[i][j], Map[i+1][j] = Map[i+1][j], Map[i][j]
print(ans)

+ Recent posts