STUDY(62)
-
백준 2748 - fibonacci 2
DP 문제 입문... ^_ㅠ 하..... 가망도 없는거 붙잡고있을라니까 멘탈이 힘들군... int main() { int N; long long arr[91] = {0,1}; scanf("%d", &N); for(int i = 2; i
2022.07.02 -
Merge Sort ( 합병 정렬 )
## 개념 요약 ## 일반적인 방법으로 구현했을 때 이 정렬은 "안정 정렬"에 속하며, 분할 정복 알고리즘 중의 하나 이다. 분할 정복 ( divide and conquer ) 방법 문제를 작은 2개의 문제로 분리하고, 각각을 해결한 다음 ! 결과를 모아서 원래의 문제를 해결하는 전략이다. 분할 정복 방법은 대개 순환 호출을 이용하여 구현한다. 과정 ! 리스트의 길이가 0 or 1 이면, 이미 정렬된 것으로 본다. 1이상이면 ? 정렬되지 않은 리스트를 절반으로 잘라 비슷한 크기의 두 개로 나눈다. 각 부분 리스트를 재귀적으로 합병 정렬을 이용해 정렬한다. 두 리스트를 다시 하나의 정렬된 리스트로 합병한다 ## 구체적인 개념 ## 하나의 리스트를 2개의 균등한 크기로 분할하고, 분할된 리스트를 정렬, 2개..
2022.06.30 -
Bubble Sort ( 버블 정렬 )
** 서로 인접한 두 원소를 검사하여 정렬하는 알고리즘 ! , 오름차순으로 정렬한다. ## 개념 요약 ## 서로 인접한 두 원소를 검사하여 정렬하는 알고리즘. 인접한 2개의 값을 비교하여, 크기가 순서대로 되어있지 않으면 교환한다. 선택 정렬과 기본 개념이 유사하다. (SWAP) ## 구체적인 개념 ## 버블 정렬은 1번째 값과 2번째 값을, 2번째 값과 3번째 값을....3번째와 4번째를.... 이런식으로 (마지막-1) 번째 자료와 마지막 자료를 비교해 교환하면서 자료를 정렬한다. 1회전을 수행하고 나면 , 가장 큰 값이 맨 뒤로 이동하므로, 2번째 loop 에서는 맨 끝에 간 큰값은 정렬에서 제외되고, 2회전을 수행하면 끝에서 2번째 값은 다음 loop 에서 제외된다. 이렇게 1회전을 수행할 때 마다..
2022.06.30 -
Insertion Sort ( 삽입 정렬 )
* 오름차순을 기준으로 정렬한다. ## 개념 요약 ## 손 안의 카드를 정렬하는 방법과 유사하다. 새로운 카드를 기존의 정렬된 카드 사이의 올바른 자리를 찾아 삽입하는 방법. 새로 삽입될 카드의 수 만큼 반복하게 되면, 전체 카드가 정렬됨. 배열의 모든 요소를, 앞에서부터 차례대로 이미 정렬된 배열 부분과 비교 해서, 자신의 위치를 찾아 삽입해 완성하는 알고리즘. 매 순서마다 해당 원소를 삽입 할 수 있는 위치를 찾아 해당 위치에 넣는다. ## 구체적인 개념 ## 삽입 정렬은 2번째 값 부터 시작해, 그 앞의 값들과 비교하여 삽입할 위치를 지정한 후 값을 뒤로 옮기고, 지정한 자리에 값을 삽입해 정렬하는 알고리즘이다. 즉, 2번째 값은 첫 번째 값, 3번째 값은 2, 1번째 값, 4번째 값은 3,2,1 ..
2022.06.30 -
Selection Sort ( 선택 정렬 )
오름차순을 기준으로 정렬한다. ## 개념 요약 ## 제자리 정렬(in-place sorting) 알고리즘 중의 하나. > 입력배열 (입력받은 배열값들) 이외에 다른 추가 메모리를 요구하지 않는 정렬 방법. 해당 순서에 원소를 넣을 위치는 이미 정해져 있고, 어떤 원소를 넣을지 선택하는 알고리즘. > Ex) 첫 번째 순서에는 가장 최소값을 넣고, 2번째 순서에는 2번째 위치에 남은 값 중에서의 최소값을 넣고.... 과정 설명 1) 주어진 배열 중에서 최소값을 찾는다. 2) 그 값을 맨 앞에 위치한 값과 교체한다. 3) 맨 처음 위치를 뺀 나머지 리스트를 같은 방법으로 교체. 4) 하나의 원소만 남을 때 까지 위의 1~3 과정을 반복. ## 구체적 개념 ## - 선택정렬은, 첫 번째 값을 두번째 값부터 마지..
2022.06.29 -
Merge, Merge Sort
합병 정렬, 합병... 걍 머지는 이해했는데 머지 소트가 ^_ㅠ 하 우선 외운다 ㅋㅋㅋㅋㅋ Merge : #include // 백준17728번 int N, M; int a[1000100]; int b[1000100]; int main(void) { scanf("%d %d", &N, &M); for (int i = 0; i = b[j] ) printf("%d ", b[j++]); else printf("%d ", a[i..
2022.06.19 -
백준 2577번 - 숫자의 개수 (코틀린)
풀이 : fun main() { val num1 = readln().toInt() val num2 = readln().toInt() val num3 = readln().toInt() var arr = Array(10, {0}) val res = (num1*num2*num3).toString() //println(res) for (i in 0 .. res.length-1) { //println("res[$i]: " + res[i].digitToInt()) var tmp = res[i].digitToInt() //println(tmp) when(tmp) { 0 -> arr[0]++ 1 -> arr[1]++ 2 -> arr[2]++ 3 -> arr[3]++ 4 -> arr[4]++ 5 -> arr[5]++ 6..
2022.06.06 -
백준 2562 - 최댓값 (코틀린)
fun main() { var arr = ArrayList() var count = 0 while (count < 9) { arr.add(readln().toInt()) count++ } var arr2 = arr.sorted() //println(arr.contains(arr2[8])) println(arr2[8]) println(arr.indexOf(arr2[8])+1) } 풀이법 : 먼저 입력 값을 받아주고, 그걸 sorted() 한 리스트에서 맨 마지막 값을 출력함으로써 최대값을 구하고, 기존 List의 index값은 , 앞에서 찾은 최대값의 list의 indexOf를 사용해 출력했다.
2022.06.06 -
백준 10818 번 - 최소, 최대 (코틀린)
import java.util.StringTokenizer fun main(args: Array) = with(System.`in`.bufferedReader()){ val arr = ArrayList() val num = readLine().toInt() val st = StringTokenizer(readLine()) while(st.hasMoreTokens()) { arr.add(st.nextToken().toInt()) } var num_list1 = arr.sorted() //println("Contents Of an Array: "+ arr) //println("Contents Of an Array: "+ num_list1) println("${num_list1[0]} ${num_list1[n..
2022.06.06 -
백준 1110번 - 더하기 사이클 (코틀린)
요 상태에서는 Token 을 쓰는수밖에 없구나ㅇㅅㅇ.. import java.io.*; fun main() = with(BufferedReader(InputStreamReader(System.`in`))) { val writer = BufferedWriter(OutputStreamWriter(System.out)) var number = readLine().toInt() var copy = number var count = 0 do { number = number % 10 * 10 + (number/10 + number%10) %10 //println(number) count++ } while (copy!=number) writer.write(count.toString()) writer.flush() w..
2022.06.06