백준 10610번 - 30

백준 10610번 바로가기 나의 풀이 주어진 숫자를 재조합해서 30의 배수를 만드는 문제. $ 30 = 3 * 10 $ 이므로 두 가지를 확인하면, 30의 배수를 만들 수 있는지 알 수 있다. 주어진 숫자에 0이 포함되는가 각 자리의 합이 3의 배수인가 (3의 배수 판별법) 만들 수 있는 최대 숫자는 각 자리를 내림차순 정렬하면 쉽게 구할 수 있다. # 입력 import sys n = str(sys.stdin.readline().strip()) nums = list(map(int, list(n))) # 처리 if '0' in n and sum(nums) % 3 == 0: print(''.join(map(str, sorted(nums, reverse=True)))) else: print(-1)

2023-7-14 · 1 min · 84 words · Junha

백준 2217번 - 로프

백준 2217번 바로가기 나의 풀이 각 로프에 걸리는 최대 중량은 사용한 로프 중 최대 중량의 최솟값이다. (즉, 최대의 최소의 개념!) 따라서 각 로프의 중량을 오름차순으로 정렬한 뒤에 하나씩 뽑아서 그 로프의 최대 중량을 기준으로 들 수 있는 최대 중량을 구했다. 식으로 나타내자면 $ max_{total} = min_{rope} * num_{ropes} $ 이를 코드로 나타내면 다음과 같다. # 입력 import sys n = int(sys.stdin.readline()) rope = [] weight = [] for _ in range(n): rope.append(int(sys.stdin.readline())) rope = sorted(rope) # 처리 for i in range(n): weight.append(rope.pop(0)*(len(rope)+1)) print(max(weight))

2023-7-14 · 1 min · 83 words · Junha

프로그래머스 - 다리를 지나는 트럭

다리를 지나는 트럭 문제 바로가기 나의 풀이 from collections import deque def solution(bridge_length, weight, truck_weights): time = 0 bridge = [0] * bridge_length bridge_sum = 0 bridge = deque(bridge) truck_weights = deque(truck_weights) while truck_weights: bridge_sum -= bridge[-1] bridge.pop() time += 1 if bridge_sum + truck_weights[0] <= weight: bridge.insert(0, truck_weights.popleft()) else: bridge.insert(0, 0) bridge_sum += bridge[0] time += bridge_length return time 고수의 풀이 import collections DUMMY_TRUCK = 0 class Bridge(object): def __init__(self, length, weight): self._max_length = length self._max_weight = weight self._queue = collections.deque() self._current_weight = 0 def push(self, truck): next_weight = self._current_weight + truck if next_weight <= self._max_weight and len(self._queue) < self._max_length: self._queue.append(truck) self._current_weight = next_weight return True else: return False def pop(self): item = self._queue.popleft() self._current_weight -= item return item def __len__(self): return len(self._queue) def __repr__(self): return 'Bridge({}/{} : [{}])'.format(self._current_weight, self._max_weight, list(self._queue)) def solution(bridge_length, weight, truck_weights): bridge = Bridge(bridge_length, weight) trucks = collections.deque(w for w in truck_weights) for _ in range(bridge_length): bridge.push(DUMMY_TRUCK) count = 0 while trucks: bridge.pop() if bridge.push(trucks[0]): trucks.popleft() else: bridge.push(DUMMY_TRUCK) count += 1 while bridge: bridge.pop() count += 1 return count def main(): print(solution(2, 10, [7, 4, 5, 6]), 8) print(solution(100, 100, [10]), 101) print(solution(100, 100, [10, 10, 10, 10, 10, 10, 10, 10, 10, 10]), 110) if __name__ == '__main__': main() 출처 ...

2023-7-14 · 2 min · 288 words · Junha

숫자로 끝내는 화학 100

하버법의 엔탈피($ 92.4 kJ/mol $)에서부터 아보가드로수 $ 6.0221367 * 10^23 $ 까지. 숫자로 화학의 주요 역사들과 기억할만한 실험과 발견들이 한 권에 담겨있다. 대부분의 교양 화학 서적들은 발견 순서대로 소개하거나, 유기/무기/물리화학과 같이 세부 분야에 따라 나누어 정리되기 마련인데, 이 책은 숫자를 기준으로 편집했다는 점에서 독특했다. 간혹 ‘라부아지에가 결혼할 때 아내 미리 안 피에레트의 나이: 13’처럼 어이없는 숫자가 등장하기도 하지만… ㅋㅋ 전반적으로는 괜찮은 내용들로 구성되어있다. (아니 많고 많은 상수들을 냅두고 왜 13을 택한건지 이해가 안된다. 차피 뒤에서 라부아지에에 대한 내용이 다시 등장하던데…) ...

2023-7-13 · 1 min · 183 words · Junha

Paper Review - CollagenTransformer - End-to-End Transformer Model to Predict Thermal Stability of Collagen Triple Helices Using an NLP Approach

Pytorch와 Chemistry를 키워드로 관련 논문들을 찾던 중에 NLP model을 이용한 논문을 발견했다. 아미노산 결합체인 콜라겐(Collagen)의 아미노산 배열로부터 녹는점 $ T_{m} $ 을 예측하는 것이 주된 목표였다. 주로 자연어 처리에 쓰이는 NLP(Natural Language Processing) 기법을 화학적 분자에 적용한다는 점에서 색다른 접근 방식이라고 생각할 수 있다. 기존에 화학 분야에 ML와 AI을 적용하기 위해서는 주로 물리화학적 특성들을 모두 고려해서 복잡한 모델을 만들어냈었는데, 이 경우 단순 아미노산 배열로부터 녹는점을 예측할 수 있기에 간편하면서도 실용적이라고 볼 수 있었다. 논문의 전체 내용을 읽기 위해서는 CollagenTransformer - ACS Publications을 참고하길 바란다. 여기에서는 이 논문에 대해서 간단한 요약과 더 알아볼 부분들에 대해서 소개하려고 한다. ...

2023-7-12 · 3 min · 598 words · Junha