천재들의 과학 노트 2 - 화학

다른 과목은 몰라도, 난 화학이라는 학문이 정말 매력적으로 느껴진다. ‘기본 물질이 무엇인가’를 탐구하는 물리학도 좋지만, 그런 기본 물질이 모여서 발생하는 상호작용을 연구하는 화학이 일상생활에서 일어나는 여러 현상들을 설명해준다는 점에서 매력을 느꼈다. 수능에서야 타임어택 양적관계 문제를 주구장창 풀어대니까 흥미가 떨어지게 되지만, 화학의 본질은 자연현상에 대해서 자꾸만 호기심을 가지게 하는 재미있는 학문이다. 이 책은 근현대과학의 대표주자 조셉 프리스틀리, 앙투안 라부아지에, 존 돌턴, 드미트리 멘델레예프를 포함해서 약간은 생소한 계면화학의 어빙 랭뮤어, 유기화학의 에밀 헤르만 피셔와 페르시 줄리앙, 생화학의 거티 코리, 결정학의 도로시 크로우풋 호지킨까지, 과학사에서 중요한 업적을 남긴 10명의 위대한 과학자들의 일대기를 담고 있다. 교과서에서 당연하듯이 배우는 여러 화학적 지식들은 사실 이런 선대 화학자들의 피땀과도 같은 노력이 수반되었기에 가능해졌다는 것을 다시 깨닫게 된다. ...

2023-6-20 · 2 min · 297 words · Junha

백준 21736번 - 헌내기는 친구가 필요해

백준 21736번 바로가기 나의 풀이 # 입력 import sys from collections import deque n,m = map(int,sys.stdin.readline().split()) maps = [list(sys.stdin.readline().strip()) for _ in range(n)] visited = [[False] * m for _ in range(n)] dx = [0,0,1,-1] dy = [1,-1,0,0] # 처리 def bfs(where): count = 0 i,j = where[0],where[1] queue = deque() visited[i][j] = True queue.append((i,j)) while queue: i, j = queue.popleft() for k in range(4): x = i + dx[k] y = j + dy[k] if 0<=x<n and 0<=y<m and not visited[x][y]: if maps[x][y] != 'X': queue.append((x,y)) visited[x][y] = True if maps[x][y] == 'P': count += 1 return count def get_index(maps, target): for idx1, i in enumerate(maps): for idx2, j in enumerate(i): if j == target: return idx1, idx2 ans = bfs(get_index(maps, 'I')) print('TT' if ans == 0 else ans) CODE REVIEW graph을 이용해서 탐색하는 문제. 탐색하는 과정에서 현재 queue에서 꺼낸 값이 무엇이냐에 따라서 조건을 분기시키는 것이 핵심이었다. ‘I’의 위치를 구하기 위해서 enumerate을 두 번 사용해서 위치를 파악했다. 다른 방법으로는 전체를 탐색하는 방법이 있다. for i in range(n): for j in range(m): if maps[i][j] == 'I': print(i,j) break

2023-6-19 · 1 min · 178 words · Junha

프로그래머스 - 같은 숫자는 싫어

같은 숫자는 싫어 문제 바로가기 나의 풀이 def solution(arr): answer = [arr[0]] from collections import deque arr = deque(arr[1:]) while arr: temp = arr.popleft() if temp != answer[-1]: answer.append(temp) return answer 고수의 풀이 def no_continuous(s): a = [] for i in s: if a[-1:] == [i]: continue a.append(i) return a CODE REVIEW queue을 활용한 문제. for문으로 arr의 원소 하나씩 뽑아올수도 있겠지만, 시간초과우려가 있기에 deque을 활용했다. arr.pop(0)보다 deque을 이용해서 arr.popleft()가 탐색 속도가 빠르다. answer = [arr[0]] arr = deque(arr[1:])로 설정하지 않으면 indexError가 발생하기 때문에 주의해야 한다. 이런 indexError을 효과적으로 방지하기 위해 고수의 풀이에서는 a[-1:]을 이용했다.

2023-6-19 · 1 min · 94 words · Junha

프로그래머스 - 기능개발

기능개발 문제 바로가기 나의 풀이 def solution(progresses, speeds): import math answer = [] days = [] for p, s in zip(progresses, speeds): days.append(math.ceil((100-p)/s)) print(days) count = 1 temp = days[0] for i in range(1,len(days)): if temp < days[i]: answer.append(count) count = 1 temp = days[i] else: count += 1 return answer + [count] 고수의 풀이 def solution(progresses, speeds): Q=[] for p, s in zip(progresses, speeds): if len(Q)==0 or Q[-1][0]<-((p-100)//s): Q.append([-((p-100)//s),1]) else: Q[-1][1]+=1 return [q[1] for q in Q] CODE REVIEW zip()을 이용해서 각 과정 별 소요시간을 계산하고, 비교를 통해 답을 구해나가는 문제! 고수의 풀이에서는 math.ceil 사용하지 않고 -((p-100)//s)을 통해 올림을 구현했다. 근데 웬만하면 math.ceil 사용하자 ㅋㅋㅋ

2023-6-19 · 1 min · 106 words · Junha

거인의 어깨 위에서

삼성과 현대, 포스코, 대우, SK, 롯데, LG, 한진그룹까지. 우리나라의 재계 순위에서 상위권에 들고 있는 이 그룹들의 뿌리는 어디에서부터 시작되었을까? 지금은 재벌 3세들이 가업을 물려받아 기업을 가꾸어나가고 있는데, 초대 재벌들의 삶은 어땠을까? 오늘의 대한민국의 경제를 만든 위대한 기업인들 9명의 이야기를 담고 있는 책이었다. 이 책은 ‘월간조선 대기업 창업주 인터뷰’에 대한 모음집인데, 각각의 창업주마다의 성격과 사투리가 있는 그대로 드러나있어서 재밌게 읽을 수 있었다. 처음부터 부를 많이 축적했던 가문이 있는 한편, 아무런 밑천도 없이 인맥과 타고난 장사 직관을 활용해서 자수성가한 예시까지. 다양한 사람들이 오늘날의 대기업의 뿌리를 만들었으며, 우리나라가 경제적으로 크게 발전하는데 큰 기틀을 제공해주었다. ...

2023-6-18 · 2 min · 234 words · Junha