⚙️ 알고리즘 85

[백준] 11047 - 동전 0

www.acmicpc.net/problem/11047 11047번: 동전 0 첫째 줄에 N과 K가 주어진다. (1 ≤ N ≤ 10, 1 ≤ K ≤ 100,000,000) 둘째 줄부터 N개의 줄에 동전의 가치 Ai가 오름차순으로 주어진다. (1 ≤ Ai ≤ 1,000,000, A1 = 1, i ≥ 2인 경우에 Ai는 Ai-1의 배수) www.acmicpc.net 1차 풀이) 직관적으로 생각했을 때 4200을 1000으로 나누고 그다음 100으로 나누게 되면 4+2 = 6번이 된다. 4790은 1000으로 4번 나누고 500으로 1번 100으로 2번 50으로 1번 10으로 4번 총 12번이 된다. 그럼 5000부터는 몫이 0이 되니까 이때 멈추고 그 전까지로 반복문을 돌려서 차례대로 나누어가면서 나누어 떨어..

[Python 문법] 주요 라이브러리 정리

https://doc.python.org/ko/3/library/index.html 파이썬 표준 라이브러리 — Python 3.9.1 문서 파이썬 표준 라이브러리 파이썬 언어 레퍼런스 는 파이썬 언어의 정확한 문법과 의미를 설명하고 있지만, 이 라이브러리 레퍼런스 설명서는 파이썬과 함께 배포되는 표준 라이브러리를 설명합 docs.python.org 여기서 추가적으로 필요한 기능이 있다면 찾는 습관을 기르자! sum() 함수 : iterable 객체(반복 가능한 객체, 즉 리스트, 사전 자료형, 튜플 자료형 등)가 입력되었을때 모든 원소의 합 반환 result = sum([1, 2, 3, 4, 5]) print(result) //15 min() 함수/max() 함수 : 파라미터가 2개이상 들어왔을때 가장 ..

[Python 문법] 함수, 입출력

함수 def 함수명(매개변수): 코드 return 반환할 값 python에서는 매개변수를 직접 지칭하여 넣을 수 있으며, 이 때 순서가 달라도 상관없다는 점이 특징이다. def add(a, b): print("더한 결과", a+b) add(b=7, a=3) //더한 결과 10 변수를 전역변수로 만들고자할 경우 global 을 변수명 앞에 붙인다. 파이썬에서는 람다 표현식을 사용할 수 있다. (lambda 매개변수 : 표현식(매개변수의 값)) 입출력 입력 input() -> 문자열을 입력받으므로 다른 자료형으로 사용하려고 할때, 그 자료형으로 변환해줄 필요가 있음. 문자열을 띄어쓰기로 구분하여 정수 자료형의 데이터로 저장하는 코드 list(map(int, input.split())) ★ ※ map(적용시킬..

[Python 문법] 조건문, 반복문

조건문 python의 조건문은 if ~ elif ~ else pass문 조건문의 값이 참이라고 해도, 아무것도 처리하고싶지 않을때 조건문을 간략하게 표현하는 예시 //들여쓰기 하지않고 한줄로 표현하는 예시 score = 85 if score>=80 : result="Success" else : result="Fail" //조건부 표현식 사용예시 score = 85 result="Success" if score>=80 else "Fail" 반복문 for문에서 수를 사용하여 표현하고자할때 -> range range(처음, 끝값+1) -> 처음~끝값 - ex) range(0, 10) : 0~9 range(수) -> 0~수-1 - ex) range(5) : 0~4 역순으로 처리하고싶을때, range(처음, 끝값..

[Python 문법] 자료형

실수형 //10억 a = 1e9 //752.5 a = 75.25e1 //3.954 a = 3954e-3 파이썬에서는 변수에 소수점을 붙인 수를 대입하면 실수형 변수로 처리한다. 소수부가 0이거나 정수부가 0이면 0을 생략할 수 있다. //a = 5.0 a = 5. //a = -0.5 a = -.5 실수형 데이터는 e나 E를 이용한 지수표현 방식을 이용할 수 있다. 즉, 유효숫자e^지수 = 유효숫자 * 10^지수 특히, 무한(INF) 값을 표현할 때 최대값이 10억일 경우 INF값을 1e9로 표현할 수 있다. (1e9 = 10억) //10억 a = 1e9 //75.25 a = 7.525e1 //3.954 a = 3954e-3 컴퓨터는 실수를 정확히 표현하지 않으므로, 정확한 실수는 round(첫번째 인자,..

[C] 조합, 순열, 중복조합, 중복순열

조합, 순열, 중복조합, 중복순열은 모두 n 개의 item에서 m개를 뽑고자 하는 경우이다. 즉, 4가지 경우 함수의 모양이 조금 다를 뿐 큰 틀은 같다. 조합(combination) : 순서와 상관없다. (0 1 2 와 2 1 0 은 같은 수로 여긴다) 순열(permutation) : 순서에 상관있다. (0 1 2 와 2 1 0 은 다른 수로 여긴다) 중복조합 : 조합이되 중복된 수가 나올 수 있다. 즉, 같은 item을 여러번 뽑을 수 있다. 중복순열: 순열이되 중복된 수가 가능하다. 즉, 같은 item을 여러번 뽑을 수 있다. 문제의 해결 순서 m개를 뽑을 공간을 미리 할당한다. (bucket) m을 뽑을 함수 (pick 함수)의 모양은 ' pick(item 정보, bucket 정보, k(앞으로 뽑..

[C] 퀵정렬을 이용한 몇 번째 작은수

10개의 난수(100보다 작은)를 발생시키고 몇 번째 작은 수를 찾을 것인가를 입력받은 후 그 수를 출력하는 프로그램을 작성하라. 입력 : Enter the number of numbers : 10 몇번째로 작은 수 : 4 출력 : 894 250 65 688 99 966 296 649 455 305 4번째로 작은 수는 296 #include #include #include void init_array(int list[], int n) { srand(time(NULL)); for (int i = 0; i < n; i++) *(list + i) = rand() % 100; } void print_array(int list[], int n) { for (int i = 0; i < n; i++) printf("..

[알고리즘/C] 퀵 정렬(quicksort)

퀵 정렬이란? 퀵 정렬(quicksort)은 평균적으로 빠른 수행 속도를 자랑하는 정렬 방법이다. 퀵 정렬 또한 분할-정복법에 근거한다. 2개의 부분 리스트로 분할한 후 각각의 부분 리스트를 다시 퀵 정렬한다. 그러나 리스트를 비균등하게 분할한다. 먼저, 리스트의 한 요소를 피봇(pivot)으로 선택한다. (여기서는 마지막 요소를 선택한 경우와 첫 번째 요소를 선택한 경우를 다룬다.) 피봇보다 작은 요소들은 모두 피봇의 왼쪽으로 옮겨지고, 피봇보다 큰 요소는 모두 피봇의 오른쪽으로 옮겨진다. 이 상태에서 피봇을 제외한 왼쪽 리스트와 오른쪽 리스트를 각각 정렬하면 전체 리스트가 정렬된다. 맨 마지막 요소를 pivot으로 하는 경우 - 첫번째 알고리즘 i는 left-1부터, j는 left부터 시작하여 이동한..

[알고리즘/C] 합병 정렬(merge sort)

합병 정렬이란? 합병 정렬(merge sort)은 하나의 배열을 두 개의 균등한 크기로 분할하고 각 분할된 배열을 정렬한 다음, 두 개의 정렬된 부분 배열을 합하여 전체가 정렬된 배열을 얻고자 하는 것이다. ※ 합병 정렬은 분할정복기법(divide and conquer)에 바탕을 두고있다. 분할 정복 기법은 문제를 작은 2개의 문제로 분리하여 그 문제를 각각 해결한 다음, 결과를 모아서 원래의 문제를 해결하는 전략이다. 합병 정렬에서의 분할 정복 기법은, 분할(divide) : 중간 크기를 구하여 이를 기준으로 2개의 부분 배열로 분할한다. 정복(conquer) : 각각의 부분 배열을 정렬한다. 병합(combine) : 정렬된 부분 배열들을 하나의 배열로 통합한다. 합병 정렬은 순환 알고리즘을 적용할 수..

⚙️ 알고리즘 2020.07.30

[알고리즘/C] 삽입정렬(insertion sort)

삽입정렬이란? 배열의 두번째 원소부터 시작해서 오름차순 혹은 내림차순으로 정렬했을 때 알맞은 자리를 찾고, 오름차순일 경우에 삽입하고자 하는 수보다 큰 수들을 뒤로 밀어낸다. 그리고 알맞은 자리에 넣고자 하는 수를 삽입하고, 이 과정을 수가 모두 정렬될 때까지 반복하는 방법이 삽입 정렬이다.(내림차순일 경우 작은 수들을 뒤로 밀어냄) void insertion_sort(int list[], int n) { int i, j, k; int temp; for (i = 1; i ..

반응형