\
10986. 나머지 합
·
Algorithm/BaekJoon Review
문제 https://www.acmicpc.net/problem/10986 10986번: 나머지 합 수 N개 A1, A2, ..., AN이 주어진다. 이때, 연속된 부분 구간의 합이 M으로 나누어 떨어지는 구간의 개수를 구하는 프로그램을 작성하시오. 즉, Ai + ... + Aj (i ≤ j) 의 합이 M으로 나누어 떨어지는 (i, j) www.acmicpc.net 이해 구간의 합을 구해야하는 문제이므로 누적 합 알고리즘을 활용한다. N의 범위가 100,000이므로 O(N)만큼 활용할 수 있고, 탐색을 통해 선택해야 하므로 이분 탐색이나 투포인터를 활용해야한다. 배열 값의 범위가 1,000,000,000이므로 이를 매번 다루면 연산 시간으로 인해 시간 초과가 염려되니, M으로 나눈 나머지 값을 가지고 활용..
[알고리즘] 누적합(Prefix Sum)
·
Algorithm/개념
개념 특정 배열이 있을 때, 구간의 합을 말한다. 예를 들어, 다음과 같은 배열이 있을 때 3번째부터 5번째까지의 누적합은 12이다. 구현 일반적으로 누적합을 구함에 있어, i번째부터 j번째까지의 누적합을 구하라고 할 때마다 하나씩 더하면 i~j까지를 m개의 원소라고 하면 시간 복잡도가 m(j-i+1)의 제곱으로 늘어난다. 하지만 간단한 개념을 도입하면 시간복잡도를 O(2)까지 줄일 수 있다. 전체 누적합을 구한다. i번째부터 j번째까지 누적합을 구하려면 전체 누적합의 j번째 인덱스에서 i-1번째 인덱스를 빼면 된다. 응용 자료구조 응용 세그먼트 트리 2042 구간 합 구하기 https://www.acmicpc.net/problem/2042 2042번: 구간 합 구하기 첫째 줄에 수의 개수 N(1 ≤ N..
11286. 절댓값 힙
·
Algorithm/BaekJoon Review
https://www.acmicpc.net/problem/11286 11286번: 절댓값 힙 첫째 줄에 연산의 개수 N(1≤N≤100,000)이 주어진다. 다음 N개의 줄에는 연산에 대한 정보를 나타내는 정수 x가 주어진다. 만약 x가 0이 아니라면 배열에 x라는 값을 넣는(추가하는) 연산이고, x가 0 www.acmicpc.net 이해 우선순위 큐를 이용하여 풀 수 있는 문제 파이썬 내장함수인 Heapq를 사용하면 간단하게 풀 수 있지만, 직접 구현해봄 구현 내장함수 사용 import heapq 를 사용하여 절댓값과 실값을 같이 저장하여 비교하여 사용 직접 구현 class를 통해 실 값을 저장하면 절댓값을 기준으로 비교하여 트리를 구성 코드 # 11286 절댓값 힙 import sys input = s..
가상환경(Virtual Workspace)
·
WEB/Django
한 번에 하나의 Project만 진행하면 더할 나위 없겠지만, 현실은 2~3개의 project를 수행할 수 있어야 한다. 근데, 만약 Project들이 요구하는 버전이 달라지면 어떡하지..? 우리에게는 가상환경이 있어! 가상 환경 위와 같은 상황에서는 Project를 바꿀 때마다 내부환경을 계속 바꿔야 프로그램에서 오류가 나지 않는다. 하지만 매번 바꾸는 건 너무 비효율적이다. 이럴 땐 가상환경을 써보자 Python 가상환경 사용하기 기본적으로 Python 은 설치되어 있다고 가정하고 진행한다. (python 설치: https://www.python.org/) python을 설치할 때 pip 설치를 체크하여 설치해야 편해진다. 이건 구글링하기 또한 가상환경은 bash(cmd) 환경에서 진행한다. # 생성..
13994. 새로운 버스 노선
·
Algorithm/SW Expert Academy Review
D2 Problem SW Expert Academy 새로운 버스 노선 SW Expert Academy SW 프로그래밍 역량 강화에 도움이 되는 다양한 학습 컨텐츠를 확인하세요! swexpertacademy.com Solution 1. 1번부터 1000번까지 버스정류장이 정해져 있으므로 버스정류장 리스트를 만들어 운용하자 2. 일반, 급행, 광역 버스 별 조건이 나눠져있지만, 결과적으로 지나가는 곳을 체크한 후 최댓값을 구하면 된다. 3. 조건을 확인하자. - 일반버스: 모두 지나감 - 급행버스: 시작이 짝수/홀수 에 따라 짝수/홀수 번만 지나간다. - 광역버스: - 홀수: 3의 배수이면서 10배수가 아닌 곳 - 짝수: 4의 배수인 곳 - 단, 시작점과 끝점은 반드시 포함된다! 따라서 시작과 끝점 조건을 ..
4613. 러시아 국기 같은 깃발
·
Algorithm/SW Expert Academy Review
D4 problem SW Expert Academy 러시아 국기 같은 깃발 SW Expert Academy SW 프로그래밍 역량 강화에 도움이 되는 다양한 학습 컨텐츠를 확인하세요! swexpertacademy.com Solution 1. 흰색, 파란색, 빨간색의 범위를 반드시 나눠야하며, 이 중 변경할 곳의 최솟값을 찾는다. 2. 범위를 완전탐색을 통해 하나씩 수정할 곳을 확인하여 이 중 최솟값을 찾는다. Code def color(i,j,N): # White 범위 = 0 ~ i # Blue 범위 = i+1 ~ j # Red 범위 = j+1 ~ N-1 white = blue = red = 0# 각각의 개수(하나로 묶어도 됌) # white for k in range(i+1): for l in range..