Loading...
2022. 12. 13. 02:35

느리게 갱신되는 세그먼트 트리 응용 -리프노드의 값을 출력하는 트리?-

1. 문제 16975번: 수열과 쿼리 21 (acmicpc.net) 16975번: 수열과 쿼리 21 길이가 N인 수열 A1, A2, ..., AN이 주어진다. 이때, 다음 쿼리를 수행하는 프로그램을 작성하시오. 1 i j k: Ai, Ai+1, ..., Aj에 k를 더한다. 2 x: Ax 를 출력한다. www.acmicpc.net 주어진 구간에 특정 값을 더해주고, 배열 A의 x번째 수를 출력하는 문제 2. 풀이 lazy propagation을 쓰지 않고 팬윅 트리를 이용하는 방법도 있다는데.. 아직 팬윅 트리는 공부하지 않았으니까 넘어가고 정직하게 lazy propagation으로 풀어보자 먼저 목표는 A 배열의 값을 바꾸고, 구간의 합이나 곱이나 이런게 아니라 결국에 A[x]를 출력하는 것이다. 그러..

2022. 12. 10. 02:43

1차원 convolution 연산을 효율적으로 하는 계산하는 방법은?

1. 문제 22964번: conv1d (acmicpc.net) 22964번: conv1d A = [1, 1], B = [1] : 1 1 A = [1, 1], B = [2] : 2 2 A = [1, 2], B = [1] : 1 2 A = [1, 2], B = [2] : 2 4 A = [2, 1], B = [1] : 2 1 A = [2, 1], B = [2] : 4 2 A = [2, 2], B = [1] : 2 2 A = [2, 2], B = [2] : 4 4 1+2+1+2+2+4+2+4 = 18 1+2+2+4+1+2+2+4 = 18 www.acmicpc.net 입력데이터와 필터가 주어질때, 1차원 convolution 연산을 수행하는 문제 2. 풀이 역시 만만한 문제가 아니다 단순히 곱하는거면 문제가 아닌..

2022. 12. 10. 02:26

파이썬 알고리즘 기본기 곱셈 연산에서 주의할 점 배우기(세그먼트 트리 문제)

1. 문제 5676번: 음주 코딩 (acmicpc.net) 5676번: 음주 코딩 각 테스트 케이스마다 곱셈 명령의 결과를 한 줄에 모두 출력하면 된다. 출력하는 i번째 문자는 i번째 곱셈 명령의 결과이다. 양수인 경우에는 +, 음수인 경우에는 -, 영인 경우에는 0을 출력한다. www.acmicpc.net 특정 구간의 수열의 곱이 양수인지 음수인지 0인지 판단하거나 특정 인덱스의 원소를 바꾸는 쿼리를 수행하는 문제 2. 곱셈의 시간복잡도 매우 큰 수를 곱할수록 프로그램의 시간복잡도가 높아진다. 이게 몇번만 연산하면 별로 차이 없어보이지만 10만번이나 반복연산해야한다면, 눈에띄게 느려진다 매우 큰 4개의 수를 곱하는 과정을 10만번 반복했는데 평균적으로 0.03초 걸린다면... 단순히 1,2,3,4 4개..

2022. 12. 9. 02:52

파이썬 알고리즘 기본기 EOF(End of File) 배우기

1. 문제 10820번: 문자열 분석 (acmicpc.net) 10820번: 문자열 분석 문자열 N개가 주어진다. 이때, 문자열에 포함되어 있는 소문자, 대문자, 숫자, 공백의 개수를 구하는 프로그램을 작성하시오. 각 문자열은 알파벳 소문자, 대문자, 숫자, 공백으로만 이루어져 있 www.acmicpc.net 2. 풀이 주어진 입력의 끝을 모를때, 어떻게 입력의 끝을 알고 문제를 풀 수 있을까? input파일을 프로그램이 읽어들이는데, 더 이상 읽을게 없을때 올바르게 프로그램을 종료할줄 알아야한다. 파이썬에서 한줄씩 입력을 받는 방법은 대표적으로 2가지가 있겠다 첫번째는 input()이고 두번째는 sys.stdin.readline() input()은 한줄을 읽을때, 개행문자를 제거하고 한줄을 읽어서 문자..

2022. 12. 8. 02:12

세그먼트 트리 응용2 -최솟값과 최댓값을 구하는 세그먼트 트리-

1. 문제 2357번: 최솟값과 최댓값 (acmicpc.net) 2357번: 최솟값과 최댓값 N(1 ≤ N ≤ 100,000)개의 정수들이 있을 때, a번째 정수부터 b번째 정수까지 중에서 제일 작은 정수, 또는 제일 큰 정수를 찾는 것은 어려운 일이 아니다. 하지만 이와 같은 a, b의 쌍이 M(1 ≤ M ≤ 100 www.acmicpc.net 이번엔 임의의 구간의 최솟값과 최댓값을 구하는 문제 2. 풀이 구간합이나 구간곱과 큰 차이 없긴한데 query 함수 구할때 조금 신경써야할듯 create_segment함수에는 왼쪽 자식과 오른쪽 자식의 최솟값과 최댓값을 저장해야함 최솟값 구하는 트리와 최댓값 구하는 트리 함수를 따로 만들수도 있지만... 그냥 인자 method를 받아서 method가 0이면 최솟..

그리디 알고리즘 - 탐욕적으로 생각하게 연습하기1(11508 2+1세일, 1789 수들의 합)

1. 문제1 11508번: 2+1 세일 (acmicpc.net) 11508번: 2+1 세일 KSG 편의점에서는 과일우유, 드링킹요구르트 등의 유제품을 '2+1 세일'하는 행사를 하고 있습니다. KSG 편의점에서 유제품 3개를 한 번에 산다면 그중에서 가장 싼 것은 무료로 지불하고 나머지 두 www.acmicpc.net 주어진 유제품을 3개 단위로 살때, 3개중에서 가장 싼 것은 무료로 살 수 있다면 최소 비용으로 구매하는 방법은..? 2. 풀이1 최대한 비싼 가격들을 지불하지 않게하면 될것 같다 유제품 가격을 받아서 가장 비싼 가격으로 내림차순 정렬한 다음에 인덱스로 cost_list를 순회해서 3의 배수가 될때 반복문을 continue시키고 3의 배수가 아니면 cost에 더해주는 방식으로 하면 될 것 ..