백준 18

[백준 | 파이썬3] 10816. 숫자카드 2 - 이진탐색

https://www.acmicpc.net/problem/10816 10816번: 숫자 카드 2 첫째 줄에 상근이가 가지고 있는 숫자 카드의 개수 N(1 ≤ N ≤ 500,000)이 주어진다. 둘째 줄에는 숫자 카드에 적혀있는 정수가 주어진다. 숫자 카드에 적혀있는 수는 -10,000,000보다 크거나 같고, 10, www.acmicpc.net > 이분 탐색 활용 탐색하는데 사용되는 시간효율성을 위해 이분탐색방법을 활용하였다. 기본 이분 탐색 개념에 중복되는 수의 개수를 카운트하는 아이디어만 생각할 수 있다면 풀 수 있는 문제였다. 먼저 입력값들을 받아오고 가지고 있는 카드들의 개수 정보를 담은 딕셔너리를 선언한다. 기본 이분 탐색 알고리즘에 중간값이 타겟과 같은 수 일 때 반환하는 값부분만 수정해주었다..

[백준 | 파이썬3] 2751. 수정렬하기2- 정렬

https://www.acmicpc.net/problem/2751 2751번: 수 정렬하기 2 첫째 줄에 수의 개수 N(1 ≤ N ≤ 1,000,000)이 주어진다. 둘째 줄부터 N개의 줄에는 수가 주어진다. 이 수는 절댓값이 1,000,000보다 작거나 같은 정수이다. 수는 중복되지 않는다. www.acmicpc.net > 정렬 알고리즘 이전 포스팅에 정리한 내용을 참고하면 파이썬의 표준 정렬 라이브러리는 최악의 경우에도 O(NlogN)의 시간복잡도를 보장한다. 해당 문제에서는 N의 최대개수가 100만이므로 NlogN은 약 600만이다. 파이썬에선 1초에 2000만번의 연산을 수행할 수 있다고 생각하면 정렬 알고리즘을 사용하여 충분히 해결가능하다.

[백준 | 파이썬3] 10773. 제로 - 스택

https://www.acmicpc.net/problem/10773 10773번: 제로 첫 번째 줄에 정수 K가 주어진다. (1 ≤ K ≤ 100,000) 이후 K개의 줄에 정수가 1개씩 주어진다. 정수는 0에서 1,000,000 사이의 값을 가지며, 정수가 "0" 일 경우에는 가장 최근에 쓴 수를 지우고, 아닐 경 www.acmicpc.net > 스택 활용 리스트를 사용하여 스택 자료구조를 간단하게 구현할 수 있다.

[백준 | 파이썬3] 11047. 동전0 - 그리디알고리즘

https://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 > 그리디 알고리즘 가장 큰 단위의 동전가치부터 순회하면서 동전의 가치가 입력받은 k보다 작은 숫자이면 해당 동전으로 k의 가치를 차감할 수 있다는 뜻이다. 따라서 해당 가치로 k를 나눈 몫(몇 번 사용할 수 있는지 그 횟수를 나타냄)을 result에 더해주고 나머지 동전의 가치로 k값을 갱신시킨다. 여기서 중요한 점은 필요한 동전의..

[백준 | 파이썬3] 18258. 큐 2

https://www.acmicpc.net/problem/18258 18258번: 큐 2 첫째 줄에 주어지는 명령의 수 N (1 ≤ N ≤ 2,000,000)이 주어진다. 둘째 줄부터 N개의 줄에는 명령이 하나씩 주어진다. 주어지는 정수는 1보다 크거나 같고, 100,000보다 작거나 같다. 문제에 나와있지 www.acmicpc.net > 큐 활용 큐의 기본 개념을 확인하는 문제이다. 만약 시간 초과가 나온다면 다음 포스팅을 참고하자. https://westshine-data-analysis.tistory.com/63?category=843975 [백준 | 파이썬3] 1753. 최단경로- 다익스트라/ 런타임에러 input() vs stdin.readline https://www.acmicpc.net/pr..

[백준 | 파이썬3] 11279. 최대 힙

https://www.acmicpc.net/problem/11279 11279번: 최대 힙 첫째 줄에 연산의 개수 N(1 ≤ N ≤ 100,000)이 주어진다. 다음 N개의 줄에는 연산에 대한 정보를 나타내는 정수 x가 주어진다. 만약 x가 자연수라면 배열에 x라는 값을 넣는(추가하는) 연산이고, x가 www.acmicpc.net > 힙 활용 힙을 활용한 다익스트라 알고리즘 구현에서 최대 힙과 최소 힙을 구현해보았었다. 해당 문제는 최대힙을 활용해 풀 수 있었다. 힙은 요소를 꺼낼때 가장 작은 값부터 뽑아온다. 이를 활용하여 가장 큰값부터 뽑아오게 하기 위해 요소에 -를 붙여서 가장 큰값을 가장 작은 값으로 변환하여 힙에 넣고 뺄 때는 -부호를 다시 붙여서 양수로 뽑히게끔 만들었다.

[백준 | 파이썬3] 9184 신나는 함수실행- 동적계획법

https://www.acmicpc.net/problem/9184 9184번: 신나는 함수 실행 입력은 세 정수 a, b, c로 이루어져 있으며, 한 줄에 하나씩 주어진다. 입력의 마지막은 -1 -1 -1로 나타내며, 세 정수가 모두 -1인 경우는 입력의 마지막을 제외하면 없다. www.acmicpc.net > 동적계획법 이미 계산된 적이 있는 값들은 dp리스트에서 빼와 사용하고 계산된 적이 없는 값들만 재귀함수를 호출하여 계산하도록 한다. a 또는 b또는 c가 0이하이면 바로 1을 돌려주고 20초과면 dp에서 20,20,20위치에 있는 값을 가져오면 되기 때문에 funny함수의 매개변수를 20,20,20으로 두고 실행한다. 실제로 계산을 통해 dp값을 구해놓아야 하는 범위는 1에서 20 사이의 값들 이..

[백준2577] 숫자의개수/ 문자열 하나하나 받아오기/ python

www.acmicpc.net/problem/2577 2577번: 숫자의 개수 첫째 줄에 A, 둘째 줄에 B, 셋째 줄에 C가 주어진다. A, B, C는 모두 100보다 같거나 크고, 1,000보다 작은 자연수이다. www.acmicpc.net 1차원 배열을 이용한 문제다. ▶입력값을 stdin으로 받아올까했으나, 반복문을 3번 돌리며 바로바로 곱셈연산을 수행하는 것이 연산량을 줄일 수 있지 않을까 하여 반복문 for와 input을 사용했다. 우선 코드와 결과는 다음과 같다. ## 2577 import sys a=1 for i in range(0,3): a*=int(input()) lst= list(str(a)) for i in range(0,10): print(lst.count(str(i))) 곱셈 결과..