개인별 결과
박성준
친구를 위한 개인 비서 AI를 만들어봤다. 무수히 많은 분기문과 다양한 토큰들을 이용해 더 자연스러운 LLM을 만들 수 있음을 몸소 깨달았다. 하지만, 용량이 많고 GPU 사용에 제약이 없다면 Meta에서 출시한 LLAMA LLM을 사용하는 것도 적절하겠다는 생각이 들었다.

Rule-based와 라마 LLM 응답의 비교표
이유는 위 비교표와 같이 Rule-Based LLM은 리스트에 있는 토큰들에 포함된 단어들이 있는 문장만 이해할 수 있으며, 그마저도 여러 문장의 응답을 받으면 맥락을 쉽게 이해하지 못하기 때문이다. 그러나 LLAMA LLM을 사용하면 보다 더 자연스럽고, 토큰에 제약을 받지 않기 때문에 무제한 응답 창의성을 발휘하기 때문이다.
친구의 건강을 위해서 개인 비서를 만들었던 점에서 굉장히 뿌듯했다. 또한, 리스트 안에 여러 단어들을 포함시킬 때는 다소 단순반복 행위가 존재했지만, 친구에게 건강관리 개인비서를 선물하겠다는 그 설렘으로 지치지 않고 계속 프로젝트를 할 수 있었다. 컴퓨터 과학자들이 프로젝트를 이행하는 가장 큰 원동력은, 사람들의 삶을 개선시킬 수 있다는 그 자부심인 것 같았다. 늘 내가 느낀 것이지만 사람이 있는 곳에 기술이 있다는 말과 같이, 이러한 토이 프로젝트를 통해 실력을 쌓고 먼 훗날 많은 사람들의 행복 증진에 기여하는 기술 개발자가 되고싶다.
그리고 LLM 구조를 뜯어가며 공부하는데, 너무 큰 흥미를 느껴 잠도 안자고 계속 개발하고 싶다는 생각이 들었다. 분명 단순반복 행위 등이 존재하는데 이렇게 흥미를 느끼고 있다는 것은 해당 CS(컴퓨터과학)분야가 나의 개인적인 적성에 깊이 맞는다는 뜻이 아닐까 생각해봤다. 역시 학문은 자기가 관심있고 즐기는 분야가 적어도 하나는 존재할 때, 누가 시키지 않아도 열심히 달려나갈 수 있는 것 같다. 내일은 또한 내일의 공부를 더 하고싶다.
권혁주
Effects, Audio, Video, UI, Camera 등 'Unity Editor의 구성요소'에 대한 이해를 증진시켰다. Particle System, Trail, Line 등10개 이상의 기본 개념을 학습했으며 관련된 기술들을 정리했다.
2차원과 3차원 물체의 텍스쳐를 표현하는 방식에 대한 분류를 진행했다. 2차원에 대해서는
1. Orhographic 시점, 외부 폴더의 파일을 Project View로 Drag&Drop
2. GameObject – 2D Object – Sprite 생성
3. Assets의 Texture Type을 Sprite(2D and UI)으로 설정
4. Spirte 오브젝트 선택 후 Sprite Renderer의 Sprite에 Assets를 Drag&Drop
과 같은 순서로 진행하고, 3차원에 대해서는
1. Perspective 시점, Light 생성 후 GameObject – 3D Object – Cube 등 생성
2. Assets의 Texture Type를 Default, Texture Shape를 2D으로 설정
3. Project View에서 Material 생성 후, Material의 Inspector View의 Albedo에 Assets을 Drag&Drop
4. Cube Object의 Mesh Renderer의 Materials에 만들어둔 Material를 Drag&Drop
과 같은 순서대로 진행함을 알았다.
양진원
두 개의 백준 문제를 풀었다. 1번 문제는 아래와 같다;
상근이는 요즘 설탕공장에서 설탕을 배달하고 있다. 상근이는 지금 사탕가게에 설탕을 정확하게 N킬로그램을 배달해야 한다. 설탕공장에서 만드는 설탕은 봉지에 담겨져 있다. 봉지는 3킬로그램 봉지와 5킬로그램 봉지가 있다.
상근이는 귀찮기 때문에, 최대한 적은 봉지를 들고 가려고 한다. 예를 들어, 18킬로그램 설탕을 배달해야 할 때, 3킬로그램 봉지 6개를 가져가도 되지만, 5킬로그램 3개와 3킬로그램 1개를 배달하면, 더 적은 개수의 봉지를 배달할 수 있다.
상근이가 설탕을 정확하게 N킬로그램 배달해야 할 때, 봉지 몇 개를 가져가면 되는지 그 수를 구하는 프로그램을 작성하시오.
입력: 첫째 줄에 N이 주어진다. (3 ≤ N ≤ 5000)
출력: 상근이가 배달하는 봉지의 최소 개수를 출력한다. 만약, 정확하게 N킬로그램을 만들 수 없다면 -1을 출력한다.
먼저 1번은 다음과 같은 알고리즘으로 풀이하면 된다.
- 설탕 무게를 입력기 위해 Scanner를 import.
- 설탕 무게 weight를 입력받기
- 사용할 봉지의 총 개수를 저장할 변수 count를 0으로 초기화.
- 5kg 봉지를 하나씩 줄이면서 3kg 봉지로 채울 수 있는지 반복적으로 시도하기 위해 while문 사용.
만약 weight가 0보다 작아지면 나눌 수 없다는 뜻이므로 반복 종료.
- 5로 나눠지는 경우 찾기 위해 if문 사용. weight / 5는 현재 남은 설탕을 5kg 봉지로 나눴을 때 필요한 개수.
만약 나눠지지 않으면 3kg 봉지 사용. 설탕 무게에서 3kg을 빼고 봉지 개수를 1개 증가시킴.
이후 다시 while문이 반복. 기존까지 사용했던 3kg 봉지 개수와 합쳐서 출력하고, return으로 프로그램 종료.
- weight가 0보다 작아질 때까지도 5와 3으로 정확히 나눌 수 없다면 -1 출력.
다음으로 2번 문제는 아래와 같다;
정수를 저장하는 스택을 구현한 다음, 입력으로 주어지는 명령을 처리하는 프로그램을 작성하시오.
명령은 총 다섯 가지이다.
- push X: 정수 X를 스택에 넣는 연산이다.
- pop: 스택에서 가장 위에 있는 정수를 빼고, 그 수를 출력한다. 만약 스택에 들어있는 정수가 없는 경우에는 -1을 출력한다.
- size: 스택에 들어있는 정수의 개수를 출력한다.
- empty: 스택이 비어있으면 1, 아니면 0을 출력한다.
- top: 스택의 가장 위에 있는 정수를 출력한다. 만약 스택에 들어있는 정수가 없는 경우에는 -1을 출력한다.
입력: 첫째 줄에 주어지는 명령의 수 N (1 ≤ N ≤ 10,000)이 주어진다. 둘째 줄부터 N개의 줄에는 명령이 하나씩 주어진다. 주어지는 정수는 1보다 크거나 같고, 100,000보다 작거나 같다. 문제에 나와있지 않은 명령이 주어지는 경우는 없다.
출력: 출력해야하는 명령이 주어질 때마다, 한 줄에 하나씩 출력한다.
2번은 다음과 같은 알고리즘으로 풀이하면 된다.
- Stack 클래스를 이용해 정수를 저장할 스택 만들기.
- 명령어 개수를 읽을 N.
- 명령어 하나씩 읽어 처리하기 위해 for문 (N번). 한 줄을 통째로 읽기 위해 nextLine() 사용.
- push X 처리: push명령은 숫자가 붙어있기 때문에 split(" ")으로 나누고 숫자 부분만 꺼냄.
X를 정수로 변환하기 위해 parseint() 사용하고 스택에 넣음.
- pop 처리: 스택이 비어있으면 -1, 아니면 가장 위에 있는 값을 꺼내 출력.
- size 처리: 현재 스택 안에 들어 있는 요소 개수를 출력.
- empty 처리: 조건연산자로 스택이 비어있으면 1, 아니면 0을 출력하게 함.
- top 처리: 스택의 가장 위에 있는 값을 출력. 값을 출력하지만 꺼내지는 않기 때문에 peek()로 확인만 함.
