한 권으로 끝내는 화학

의무복무하는 기간동안 본전공인 화학에 대한 책을 못읽어서 감이 떨어지길래, 간만에 화학 관련 책들 몰아읽기 프로젝트를 진행 중이다. 지난 천재들의 화학 노트 2 - 화학 또한 그런 노력의 일환으로 읽었던 책이다. 책 제목에 한권으로 끝내는 이것만 알면 와 같은 수식어가 붙은 책들을 싫어하지만, 간만에 생기부에 올릴것만 같은 책을 들어 읽기 시작했다. 이 책은 화학과 관련된 직종에 일하거나, 현직 교수님이신 분들이 작성한 책이다. 복잡하고 어려워보이는 화학을 쉽게 풀어내기 위해 많이 애썼다는 느낌이 든다. 화학의 큰 분야인 유기화학, 무기화학, 생화학, 물리화학과 현대 화학의 발전들에 대해서도 꼼꼼하게 소개해준 책이다. 수식이나 원리 측면에서는 깊이가 아쉬운 부분이 있지만, 화학이라는 세계에 대해서 아주 얕고 넓게 읽을 수 있어서 전체적인 숲을 보게 만들어주는 책이었다. ...

2023-7-4 · 2 min · 308 words · Junha

Lofoten 2인용 보드게임

❤️My bestie❤️가 미국에서 구입해온 2인용 보드게임 Lofoten! 스플렌더나 로스트시티, 다빈치코드 같은 2인용 보드게임을 즐겨하곤 하는데, 간만에 독특하고 신선한 보드게임을 접하게 되어서 시간가는줄 모르고 재미있게 놀았다. February 3, 2023에 출시된 따끈따끈한 게임이라 국내에는 정식 발매되지 않았지만, 인기를 몰아서 언젠간 우리나라에서도 출시되는 날을 기대해본다. 바이킹 부족의 Jarl이 되어서 4가지의 merchandise들을 모으고 이를 통해 상점에서 더 높은 PP(포인트)를 얻는 것이 게임의 주 목표다. 스플렌더와 은근 비슷하면서도 독특한 플레이 방식 때문에 빠져들게 만드는 매력을 가지고 있다. ...

2023-7-2 · 2 min · 261 words · Junha

프로그래머스 - 주식가격

주식가격 문제 바로가기 이중 for문을 이용한 풀이 def solution(prices): updown = [0] * len(prices) for i in range(len(prices)): for j in range(i+1,len(prices)): updown[i] += 1 if prices[i] > prices[j]: break return updown queue을 이용한 풀이 def solution(prices): updown = [] for i in range(len(prices)): from collections import deque current = prices[i] check = deque(prices[i:]) count = 0 while check: temp = check.popleft() count += 1 if current > temp: break updown.append(count-1) return updown 다른 사람들의 풀이 구경하기 def solution(prices): stack = [] answer = [0] * len(prices) for i in range(len(prices)): while stack != [] and stack[-1][1] > prices[i]: past, _ = stack.pop() answer[past] = i - past stack.append([i, prices[i]]) for i, s in stack: answer[i] = len(prices) - 1 - i return answer 출처 CODE REVIEW 이중 for문 풀이가 간편하지만, 실상 데이터가 늘어나면 늘어날수록 시간이 많이 소요된다. 시간복잡도:O(N^2) queue을 이용한 풀이도 시도했는데, queue를 활용했다는 점만 다르지 실상 시간복잡도가 O(N^2)라서 시간초과로 효율성에서 꽝이었다. 다른 사람들의 풀이도 구경해봤는데, 조건문을 이용해서 구하고 count을 1씩 늘려나가는 대신, 범위로 한번에 구해서 효율성을 개선시켰다는 점을 깨달았다. 굳이 필요하지 않은 정보는 메모리절약을 위해 저장하지 말자!

2023-7-1 · 1 min · 179 words · Junha

백준 14215번 - 세 막대

백준 14215번 바로가기 나의 풀이 # 입력 import sys bars = list(map(int, sys.stdin.readline().split())) bars = sorted(bars) # 처리 c = bars[-1] d = sum(bars[:2]) if c <= d - 1: print(sum(bars)) else: print(2*d-1) CODE REVIEW 간만에 머리도 식힐 겸 기하학 문제를 풀었다. 삼각형의 결정 조건을 안다면 쉽게 풀어낼 수 있는 문제였다. 수학적으로 표현하자면… let) a<=b<=c, c<a+b, if) c<a+b, ans=a+b+c, else) ans=2*(a+b)-1

2023-6-30 · 1 min · 61 words · Junha

프로그래머스 - 프로세스

프로세스 문제 바로가기 나의 풀이 def solution(priorities, location): from collections import deque q = deque(priorities) count = 1 while q: m = max(q) temp = q.popleft() location -= 1 if location < 0: if temp < m: location = len(q) q.append(temp) else: return count else: if temp < m: q.append(temp) else: count += 1 다른 사람들의 풀이 구경하기 def solution(priorities, location): queue = [(i,p) for i,p in enumerate(priorities)] answer = 0 while True: cur = queue.pop(0) if any(cur[1] < q[1] for q in queue): queue.append(cur) else: answer += 1 if cur[0] == location: return answer 출처 CODE REVIEW 첫 번째 풀이에서는 deque을 이용해서 풀어내었다. 원소를 맨 앞에서부터 하나씩 꺼내면서 최대인지 아닌지 따져주면 쉽게 결과를 얻을 수 있다. 다른 사람들의 풀이 구경하기 같은 경우, 논리는 비슷하지만 특이하게 any()를 이용해서 풀어내었다. 확실히 식이 깔끔해지긴 한듯! * 다만, 이 경우 priorities의 길이가 아주 길어질수록 소요시간이 급격하게 증가하기 때문에 그렇게 추천하진 않는다…

2023-6-30 · 1 min · 148 words · Junha