시작하며삼성전자 SW 역량테스트 B형은 라이브러리를 사용할 수 없는 대신 Reference Code를 제공합니다. 제가 구현한 알고리즘들은 기본적으로 Reference Code를 바탕으로 하며 이해하는 과정에서 주석을 달며 정리했습니다. 구현 코드는 실제 시험에서 사용할 때는 달라질 수 있으며 각자에게 맞는 방식으로 구현하시는 것을 추천합니다. 이진 검색 알고리즘(Binary Search)① 이진 검색 알고리즘(Binary Search)는 오름차순으로 정렬된 리스트에서 특정한 값의 위치를 찾는 알고리즘입니다. 처음 중간의 값을 임의의 값으로 선택하여, 그 값과 찾고자 하는 값의 크고 작음을 비교하는 방식입니다. 처음 선택한 중간값보다 찾고자 하는 값이 크면 중간값은 새로운 최댓값이 되며, 작으면 중간값은..
연결 리스트(LinkedList) ① 연결 리스트(LinkedList)는 각 노드(Node)가 데이터와 포인터를 가지고 한 줄로 연결되어 있는 방식으로 데이터를 저장하는 자료구조입니다. 아래 소스코드에서 구현한 연결 리스트는 각 노드가 데이터를 가지고 이전 노드와 다음 노드의 주소 값 2개를 저장하는 이중 연결 리스트(Dobly LinkedList) 구조입니다. 여기서 노드는 Node라는 클래스로 선언되어 있고 데이터(data), 이전 노드(prev), 다음 노드(next)로 구성되어 있습니다. ② 아래 소스코드에서 연결 리스트와 관련된 함수들은 다음과 같습니다. addFirst(int data): 리스트의 맨 앞에 data를 추가하는 함수 addLast(int data): 리스트의 맨 뒤에 data를 ..
스택(Stack) ① 스택(Stack)는 가장 마지막에 들어간 데이터가 먼저 나오는 LIFO(Last In First Out) 구조를 가지고 있습니다. 아래 소스코드에서 1차원 배열로 스택을 구현하였고 스택 관련 함수들은 다음과 같습니다. stackIsEmpty(): 스택이 비어있는지 판단하는 함수 stackIsFull(): 스택에 더이상 들어갈 공간이 없는지 판단하는 함수 size(): 스택에 들어가있는 데이터의 개수를 return하는 함수 push(int value): 스택에 value값을 저장하는 함수 peek(): 스택에 가장 마지막에 들어간 데이터를 return하는 함수 pop(): 스택에 가장 마지막에 들어간 데이터를 return하고 삭제하는 함수 ② 아래 소스코드의 맨 아래 주석 부분을 보면..
시작하며 삼성전자 SW 역량테스트 B형은 라이브러리를 사용할 수 없는 대신 Reference Code를 제공합니다. 제가 구현한 자료구조들은 기본적으로 Reference Code를 바탕으로 하며 이해하는 과정에서 주석을 달며 정리했습니다. 구현 코드는 실제 시험에서 사용할 때는 달라질 수 있으며 각자에게 맞는 방식으로 구현하시는 것을 추천합니다. 큐(Queue) ① 큐(Queue)는 먼저 집어넣은 데이터가 먼저 나오는 FIFO(First In First Out) 구조를 가지고 있습니다. 아래 소스코드에서 1차원 배열로 큐를 구현하였고 큐 관련 함수들은 다음과 같습니다. queueIsEmpty(): 큐 안이 비어있는지 판단하는 함수 queueIsFull(): 1차원 배열의 최대 크기를 벗어나면 안 되기에 ..
문제 https://www.acmicpc.net/problem/17780 17780번: 새로운 게임 재현이는 주변을 살펴보던 중 체스판과 말을 이용해서 새로운 게임을 만들기로 했다. 새로운 게임은 크기가 N×N인 체스판에서 진행되고, 사용하는 말의 개수는 K개이다. 말은 원판모양이고, 하나의 말 위에 다른 말을 올릴 수 있다. 체스판의 각 칸은 흰색, 빨간색, 파란색 중 하나로 색칠되어있다. 게임은 체스판 위에 말 K개를 놓고 시작한다. 말은 1번부터 K번까지 번호가 매겨져 있고, 이동 방향도 미리 정해져 있다. 이동 방향은 위, 아래, 왼쪽, 오른쪽 www.acmicpc.net 문제 이해 백준의 17780번 새로운 게임 문제입니다. 체스판과 말에 대한 정보가 주어지고 하나의 칸에 4개의 말이 쌓이는 턴..
문제 https://www.acmicpc.net/problem/17837 17837번: 새로운 게임 2 재현이는 주변을 살펴보던 중 체스판과 말을 이용해서 새로운 게임을 만들기로 했다. 새로운 게임은 크기가 N×N인 체스판에서 진행되고, 사용하는 말의 개수는 K개이다. 말은 원판모양이고, 하나의 말 위에 다른 말을 올릴 수 있다. 체스판의 각 칸은 흰색, 빨간색, 파란색 중 하나로 색칠되어있다. 게임은 체스판 위에 말 K개를 놓고 시작한다. 말은 1번부터 K번까지 번호가 매겨져 있고, 이동 방향도 미리 정해져 있다. 이동 방향은 위, 아래, 왼쪽, 오른쪽 www.acmicpc.net 문제 이해 백준의 삼성 SW 역량 테스트 기출문제집에 있는 새로운 게임 2 문제입니다. 체스판과 말에 대한 정보가 주어지고..
문제 https://www.acmicpc.net/problem/17404 17404번: RGB거리 2 RGB거리에 사는 사람들은 집을 빨강, 초록, 파랑중에 하나로 칠하려고 한다. 또한, 그들은 모든 이웃은 같은 색으로 칠할 수 없다는 규칙도 정했다. 집 i의 이웃은 집 i-1과 집 i+1이고, 첫 집과 마지막 집도 이웃이다. 각 집을 빨강으로 칠할 때 드는 비용, 초록으로 칠할 때 드는 비용, 파랑으로 드는 비용이 주어질 때, 모든 집을 칠하는 비용의 최솟값을 구하는 프로그램을 작성하시오. www.acmicpc.net 문제 이해 백준의 RGB거리 2 문제입니다. 백준 1149번 RGB거리 문제에서 첫 집과 마지막 집도 이웃이라는 조건이 추가되었습니다. 첫 집부터 마지막 집까지 순차적으로 비용의 최솟값을..
문제 https://www.acmicpc.net/problem/13398 13398번: 연속합 2 첫째 줄에 정수 n(1≤n≤100,000)이 주어지고 둘째 줄에는 n개의 정수로 이루어진 수열이 주어진다. 수는 -1,000보다 크거나 같고, 1,000보다 작거나 같은 정수이다. www.acmicpc.net 문제 이해 백준의 연속합2 문제입니다. n개의 임의의 수열이 주어졌을 때, 이 중 연속된 몇 개의 수를 선택해서 구할 수 있는 가장 큰 합을 구하는 문제입니다. 다만, 연속합 문제와는 다르게 수열에서 수를 하나 제거할 수도 안 할 수도 있다는 조건이 있습니다. n이 1이상 100,000 이하라는 점에서 시간 복잡도 O(N) 안에 풀어야 한다고 생각했고 다이나믹 프로그래밍(Dynamic Programmi..
문제 https://www.acmicpc.net/problem/15990 15990번: 1, 2, 3 더하기 5 각 테스트 케이스마다, n을 1, 2, 3의 합으로 나타내는 방법의 수를 1,000,000,009로 나눈 나머지를 출력한다. www.acmicpc.net 문제 이해 백준의 1, 2, 3 더하기 시리즈 중 5번 문제입니다. 정수 n이 주어졌을 때, n을 1, 2, 3 (3개의 수)의 합으로 나타내는 방법의 수를 구하는 문제입니다. 다만, 같은 수를 두 번 이상 연속해서 사용하면 안 된다는 조건이 있습니다. 방법의 수를 1,000,000,009로 나눠야 한다는 점과 n이 1이상 100,000 이하라는 점에서 다이나믹 프로그래밍(Dynamic Programming)으로 풀어야 한다고 생각했습니다. ..
- Total