본문 바로가기

전체 글107

[BruteForce] 백준 1107: 리모컨 예전에 한 번 리뷰했었던 문제인데, 지금 다시 풀어본 풀이가 좀 더 깔끔하다고 생각되어 다시 포스팅한다. https://www.acmicpc.net/problem/1107 1107번: 리모컨 첫째 줄에 수빈이가 이동하려고 하는 채널 N (0 ≤ N ≤ 500,000)이 주어진다. 둘째 줄에는 고장난 버튼의 개수 M (0 ≤ M ≤ 10)이 주어진다. 고장난 버튼이 있는 경우에는 셋째 줄에는 고장난 버튼이 www.acmicpc.net 이동하고자 하는 목표 채널(N)을 입력받고, 고장난 버튼들을 입력받아 이 버튼들을 0~9까지의 vector에서 제외해 사용가능한 버튼들의 vector, "usableBtns"를 만든다. // fill usableBtns vector for (int i = 0; i < 10; .. 2024. 1. 6.
[Algorithm] BruteForce 0. 정의 BruteForce란, '무식하게 풀어본다'는 말 그대로, 모든 가능한 경우의 수를 하나하나 늘어놓아 가며 그 답을 구하는 알고리즘이다. 다른 말로는 완전 탐색(Exhaustive Search) 이라고도 한다. 사람이 일일이 손으로 나열해 가며 풀기에는 그 경우의 수가 너무 방대하나, 컴퓨터라면 충분히 계산할 수 있기 때문에 어찌 보면 컴퓨터의 성능을 가장 잘 활용할 수 있는 방법이다. 가장 아름답지 못해 보이는 풀이법이 가장 컴퓨터의 순수성과 닿아 있는 방법이라고 할 수 있다. 1. 접근법 for, while문 등의 방법을 통해 접근할 수도 있고, 주로 재귀호출(recursive call)을 사용해 접근한다. 재귀호출을 사용할 때는 반드시 Base case를 올바르게 설정하여 무한 재귀호출의.. 2024. 1. 6.
[Decoder Generator] 이전 포스팅에서 설명한 코드들이 어떻게 작동하는지 알아본다. 우선 이전 포스팅에서 설명한 SimpleModel class의 instance를 만들고 불러온다. model = SimpleModel().to(device) m = model .to(device) 부분은 colab의 gpu사용 시, model과 data가 모두 gpu에 올라와 있어야 하기 때문에 첨부된 코드이다. 앞서 만든 xb, yb를 가져와서 model을 실행한다. 이 과정에서 SimpleModel class의 forward 멤버 함수가 작동한다. #xb, yb = get_batch('train') logits, loss = m(xb, yb) forward 함수의 실행 결과로 logit과 loss가 반환된다. logit은 256*65 값으로.. 2023. 12. 17.
[Decoder Model] class SimpleModel(nn.Module): def __init__(self): super().__init__() self.tok_emb = nn.Embedding(vocab_size, n_emb) self.pos_emb = nn.Embedding(block_size, n_emb) self.blocks = nn.Sequential( Block(n_emb, n_head=4), Block(n_emb, n_head=4), Block(n_emb, n_head=4), ) self.lm_head = nn.Linear(n_emb, vocab_size) def forward(self, idx, targets=None): B, T = idx.shape tok_emb = self.tok_emb(idx) # (B,.. 2023. 12. 17.