본문 바로가기

Algorithms

(15)
Find Pivot Index 문제 자신을 기준으로 왼쪽과 오른쪽의 합이 같은 수의 인덱스를 구하는 함수를 만들어라 만약 피벗이 존재 하지 않을 경우 -1을 리턴해라 풀이 1. sum = 전체 합, leftSum = 피벗의 왼쪽에 위치한 수들의 합, rightSum = 오른쪽에 위치한 수들의 합의 값을 가지는 변수를 생성 초기에는 sum과 같다 2. 배열이 가진 모든 수의 합을 구한다 3. rightSum 에서 현재 인덱스의 수를 빼고 4. 이전 인덱스의 수를 leftSum에 더한다. 5. leftSum과 rightSum을 비교한다. 같은 수가 나오면 피벗 코드 class Program { public static void Main() { int[] nums = { 1, 8, 2, 9, 2, 3, 6 }; Console.WriteLi..
moveZeros 문제 주어진 배열에서 0을 끝쪽으로 보내는 함수를 만들어라 풀이 1. for문을 돌려 i가 0이 아닐 경우 array[index] = array[i]. 2. for문이 끝나면 index의 위치부터 array.Length까지 0를 대입. 코드 class Program { public static void Main() { int[] array = { 9, 1, 2, 0, 4, 7, 6, 0, 0 }; MoveZeros(array); } public static void MoveZeros(int[] array) { int index = 0; for (int i = 0; i < array.Length; i++) { if (array[i] != 0) { array[index] = array[i]; index++;..
최빈값 Mode 알고리즘 알고리즘 public static void Main(string[] args) { // 최빈값을 찾을 배열 int[] scores = { 1, 3, 3, 3, 3, 3, 3, 4, 4, 5, 5 }; // 들어올 수를 인덱스로 할 배열 | 0~999 인덱스 // 들어올 배열은 1, 3, 4, 5의 값만을 가지기 때문에 // indexes는 1, 3, 4, 5만 사용될 예정 int[] indexes = new int[1000]; // 카운트 int max = int.MinValue; // 최빈값 int mode = 0; for (int i = 0; i < scores.Length; i++) { indexes[scores[i]]++; } for (int i = 0; i < indexes.Length; i++..
검색 알고리즘 이진 탐색(이분 탐색) Binary Search 3개의 인덱스 변수 low(제일 왼쪽, 첫번째), mid((low + high) / 2) high(마지막 n-1) mid한테 target(찾고자 하는 데이터)를 가르키고 있는지 물어본다 맞다면 target은 mid (인덱스 번호)가 된다. 만약 아니라면 찾을 데이터가 mid에 있는 데이터보다 큰지 작은지를 확인함 만약 크다고 하면 low값을 mid + 1의 값으로 바꿈 만약 작다고 하면 high값을 mid - 1의 값으로 바꾼다 mid는 다시 (low + high) / 2 의 인덱스 번호를 가짐 이진 탐색 public static void Main(string[] args) { // 이진 탐색(Binary Search) int[] data = { 1, 3, 5, 7, 9 }; int N = data.Le..
선택 정렬 알고리즘 본인이 시도 했던 정렬 public static void Main(string[] args) { int[] data = { 3, 2, 1, 4, 5 }; // 내가 시도해본 정렬 for (int i = 0; i data[i + 1]) { int temp = data[i]; data[i] = data[i + 1]; data[i + 1] = temp; } } } 선택 정렬 public static void Main(string[] args) { int[] data = { 3, 2, 1, 4, 5 }; // 선택 정렬 알고리즘 for (int i = 0; i < data.Length - 1; i++) { for (int j = i + 1; ..
순위 알고리즘 public static void Main(string[] args) { // {3, 4, 1, 2, 5} int[] scores = { 90, 87, 100, 95, 80 }; // 1을 5번 반복하여 집어 넣는다 int[] rankings = Enumerable.Repeat(1, 5).ToArray(); for (int i = 0; i < scores.Length; i++) { // 1등으로 초기화, 순위 배열을 매 회전마다 1등으로 초기화 rankings[i] = 1; for (int j = 0; j < scores.Length; j++) { // 현재와 나머지를 비교 if(scores[i] < scores[j]) { // 나 보다 큰 점수가 나오면 순위 1 증가 rankings[i]++; } } ..
근삿값 알고리즘 public static void Main(string[] args) { int min = int.MaxValue; int[] numbers = { 10, 20, 30, 29, 17 }; // target의 근삿값을 찾을 것 int target = 11; // target에 가장 가까운 값을 넣을 변수 int near = 0; for (int i = 0; i Math.Abs(numbers[i] - target)) { min = Math.Abs(numbers[i] - target); near = numbers[i]; } } Console.WriteLine(near); } 결과값 참조: https://www.youtube.com/watch?v=Gy..
별찍기 static void Main(string[] args) { for (int i = 0; i < 5; i++) { for (int j = 0; j