본문 바로가기

자바

[자료구조와 함께 배우는 알고리즘 입문] 6.정렬 알고리즘(2) 3. 단순 선택 정렬 3-1. 단순 선택 정렬 알아보기 가장 작은 요소는 맨 앞으로, 두 번째로 작은 요소는 맨 앞에서 두 번째로 이동하고 그 다음으로 작은요소, 또 그 다음으로 작은요소를 옮겨주면서 정렬해주는 알고리즘이다. 쉽게 표현하면 아래와 같은 과정을 통해 정렬을 시키는 것이다. 3-2. 단순 선택 정렬 적용 static void swap(int[] a, int idx1, int idx2){ int temporay = a[idx1]; a[idx1] = a[idx2]; a[idx2] = temporay; //idx1의 데이터 값을 임시 변수에 저장하고 //idx1과 idx2데이터 교환 } static void selectionSort(int[]a, int n){ for (int i = 0; i < .. 더보기
[프로그래머스] 같은 숫자는 싫어요 🖊️문제 배열 arr가 주어집니다. 배열 arr의 각 원소는 숫자 0부터 9까지로 이루어져 있습니다. 이때, 배열 arr에서 연속적으로 나타나는 숫자는 하나만 남기고 전부 제거하려고 합니다. 단, 제거된 후 남은 수들을 반환할 때는 배열 arr의 원소들의 순서를 유지해야 합니다. 예를 들면, arr = [1, 1, 3, 3, 0, 1, 1]이면 [1, 3, 0, 1]을 return 합니다. arr = [4, 4, 4, 3, 3]이면 [4, 3]을 return합니다. 배열 arr에서 연속적으로 나타나는 숫자는 제거하고 남은 수들을 return하는 solution함수를 완성해 주세요. 🖊️풀이 public static int[] solution(int []arr) { //stack 생성해서 배열에 저장된 값.. 더보기
[백준]25556 포스텍 https://www.acmicpc.net/problem/25556 🖊️문제 포닉스는 길이가 N인 순열 A 네 개의 비어 있는 스택을 가지고 있다. 길이가 N인 순열이란,1이상 N이하의 서로 다른 정수 N개가 임의로 나열된 수열을 말한다. 스택이란 자료구조의 한 종류로 가장 나중에 삽입한 자료가 가장 먼저 나오는 후입선출 (Last In First Out, LIFO)의 특성을 가지고 있다. 포닉스는 PPC를 맞아 더러워진 순열을 청소하려 한다. 순열을 청소하는 것은 다음과 같은 과정을 통해 순열을 오름차순으로 정렬하는 것을 뜻한다. 즉 순열을 1,2,3,⋯N으로 만들어야 한다. 순열 A의 원소들을 앞 원소부터 순서대로 네 개의 스택 중 하나에 삽입한다. 순열 A의 모든 원소를 스택에 삽입했다면, 네 개 .. 더보기
[자료구조와 함께 배우는 알고리즘 입문] 6. 정렬 알고리즘 (1) 1. 정렬 알고리즘이란? 1-1. 정렬이란? 정렬은 다들 알고 있는 것처럼 데이터를 순서에 따라 나열하는 것이다. 정렬 알고리즘을 이용해 데이터를 정렬하면 데이터 검색이 조금 더 쉬워지게 된다. 1-2. 정렬 알고리즘의 안정성 정렬 알고리즘은 안정된 알고리즘 / 안정되지 않은 알고리즘으로 나눌 수 있다. 안정된 정렬은 키값이 같은 요소의 순서가 정렬 전후에도 유지되는 것이다. 1-3. 내부 정렬과 외부 정렬 내부 정렬은 정렬할 모든 데이터를 하나의 배열에 저장할 수 있을 때 사용하는 알고리즘이다. 외부 정렬은 정렬할 데이터가 너무 많아서 하나의 배열에 저장할 수 없을 때 사용하는 알고리즘이다. 외부 정렬의 경우 알고리즘이 복잡해지고 별도의 팔일 등이 요구된다. 1-4. 정렬 알고리즘의 핵심요소 : 교환,.. 더보기
[자료구조와 함께 배우는 알고리즘 입문] 5. 재귀 알고리즘 (2) 3. 하노이의 탑 이런 식으로 원반 위에 원반이 쌓여있는 탑을 맨 끝에 있는 기둥으로 옮기는 문제가 하노이의 탑이다. 맨위의 원반을 1, 가운데를 2, 마지막을 3이라고 가정하고 위의 과정을 조금 축소시켜서 말해보면 1) (1,2)를 Pole2로 옮긴다 2) (3)을 Pole3으로 옮긴다. 3) (1,2)를 Pole3으로 옮긴다. 고 생각할 수 있다. 원반이 몇 개가 쌓여있는 같은 과정으로 처리하면 된다. 이걸 재귀로 해결할 수 있는데, 코드로 표현해보면 아래와 같이 작성할 수 있다. static void move(int no, int x, int y){ //no = 원반 개수, x = 시작하는 기둥 번호, y = 맨 마지막 기둥 번호 if(no>1){ move(no-1,x,6-x-y); //no = 3.. 더보기
[자료구조와 함께 배우는 알고리즘 입문] 5. 재귀 알고리즘 (1) 1. 재귀 알고리즘의 기본 1-1. 재귀란? 어떤 사건이 자기 자신을 포함하고 있거나 자기 자신을 사용해 정의하고 있을 때 재귀적이라고 한다. 1-2. 팩토리얼 구하기 팩토리얼(n!)은 1부터 n까지의 수를 모두 곱한 값을 구하는 것이다. 만약 5!을 한다면 5*4*3*2*1 = 120의 결과값이 나와야한다. 재귀를 이용해 팩토리얼을 구하는 함수는 다음과 같다. static int factorial(int n){ if(n==1){ return 1; } return n*(factorial(n-1)); } 만약 n이 1과 같으면 1을 반환시키고, 그렇지 않을 경우에는 n*을 factorial(n-1)과 계속 곱해주어 팩토리얼의 결과값을 반환시킬 수 있게 한다. 1-3. 유클리드 호제법 두 정수의 최대공약수를.. 더보기
[자료구조와 함께 배우는 알고리즘 입문] 4. 스택과 큐 스택, 큐는 이전에 간단하게 정리해둔 필기가 있어서 기본적인 건 그걸로 대체하고 추가로 내가 모르는 부분만 작성하기루 절대 귀찮은거 아님!!!!!!! 1. 스택 2. 큐 2-1. 배열로 큐 만들기 2-2. 링 버퍼로 큐 만들기 배열 요소를 앞쪽으로 옮기지 않는 큐를 구현하기 위해 사용하는 자료구조가 링버퍼이다. 약간 초등학생때 짜던 방학 계획표처럼 동그라미 안에서 첫 값과 마지막 값이 연결되어있는 구조라고 생각하면 된다. 맨 첫값과 끝 값을 논리적으로 구분하기 위해 사용하는 것이 프론트, 리어이다. 링 버퍼를 통한 큐의 인큐, 디큐는 시간복잡도 O(1)이 된다. 링버퍼를 사용해 큐를 구현하면 아래와 같이 구현할 수 있다. public class IntQueue { private int[] queue; /.. 더보기
[자료구조와 함께 배우는 알고리즘 입문] 3. 검색 알고리즘(2) 3. 이진 검색 3-1. 이진 검색 알아보기 이진검색은 배열이 오름차순이나 내림차순으로 정렬되어있을 때 데이터를 찾기 위해 사용하는 알고리즘이다. 배열이 오름차순으로 정렬되어있는 경우에는 다음과 같이 데이터를 찾으면 된다. 1) 배열의 중앙값과 찾고자 하는 데이터 비교 2) 중앙값보다 데이터가 작으면 중앙값 이전 부분에서 검색 수행 3) 중앙값보다 데이터가 크면 중앙값 이후 부분에서 검색 수행 배열이 내림차순일 경우에는 중앙값과 비교하는 부분은 동일하게 수행하고, 남은 두 단계는 반대로 수행해주면 된다. 기존 검색 알고리즘보다 검색 수행 속도가 절반으로 줄기 때문에 시간복잡도는 O(logN)이 된다. 오름차순으로 정렬된 배열을 이진검색하는 코드를 작성하면 아래와 같다. static int binSearc.. 더보기

728x90