Algorithm PS👩🏻💻
-
[프로그래머스] 두 정수 사이의 합(Python)Algorithm PS👩🏻💻/프로그래머스 2023. 5. 23. 15:12
문제 링크 https://school.programmers.co.kr/learn/courses/30/lessons/12912 풀이 두 정수 a, b가 주어졌을 때 a와 b 사이에 속한 모든 정수의 합을 리턴하는 함수, solution을 완성하세요. 예를 들어 a = 3, b = 5인 경우, 3 + 4 + 5 = 12이므로 12를 리턴합니다. 개념 & 이론 등차수열의 합 이용 : 항의 수 * (초항 + 말항) // 2 코드 def solution(a, b): if a > b: a, b = b, a return sum(range(a, b+1)) 이렇게 해도 시간 복잡도는 O(n)이기에 시간이 걸린다. 최적 코드 def solution(a, b): return (abs(a-b)+1)*(a+b)//2 위의 등차..
-
[프로그래머스] 나누어 떨어지는 숫자 배열(Python)Algorithm PS👩🏻💻/프로그래머스 2023. 5. 23. 15:09
문제 링크 https://school.programmers.co.kr/learn/courses/30/lessons/12910 풀이 풀이 설명 [출처] https://wikidocs.net/22803 filter(): 특정 조건으로 걸러, 걸러진 요소들로 iterator객체를 만들어서 리턴해주는 함수. filter를 사용할 땐, list로 다시 감싸줘야 편하다. answer = list(filter(lambda x : x < 5, arr)) 코드 def solution(arr, divisor): answer = [] answer = list(filter(lambda x: x % divisor == 0, arr)) if not answer: answer.append(-1) else: answer.sort()..
-
[프로그래머스] 2016년(Python)Algorithm PS👩🏻💻/Implementation 2023. 5. 23. 15:07
1. 2016년 문제 링크 https://school.programmers.co.kr/learn/courses/30/lessons/12901 개념 & 문법 - 개념 1. 윤년 윤년: 유일하게 2월에 2/29이 추가되어 1년이 366일이 되는 것을 의미한다. 윤년의 조건 4로 나누어 떨어지면 -> 윤년 4로 나누어 떨어져도 100으로 나누어 떨어지면 -> 평년 100으로 나누어 떨어져도 400으로 나누어 떨어지면 -> 윤년 => year % 4 == 0 and year % 100 != 0 or year % 400 == 0 [날수를 이용하여 요일 구하기] https://m.blog.naver.com/PostView.naver?isHttpsRedirect=true&blogId=itinstructor&logNo..
-
[이코테] chap10. 그래프 이론Algorithm PS👩🏻💻/개념 2023. 5. 23. 03:00
서로소 집합 서로소 집합(Disjoint Sets)은 공통 원소가 없는 두 집합을 의미한다. 이때 집합 간의 관계를 파악하기 위해 서로소 집합 알고리즘을 사용할 수 있는데, 서로소 집합 알고리즘은 union-find 연산으로 구성되며, 모든 노드는 자신이 속한 집합을 찾을 때 루트 노드를 재귀적으로 찾는다. (즉, 루트 노드가 같으면 같은 집합으로 본다.) 서로소 집합 알고리즘은 최소 신장 트리를 찾는 크루스칼 알고리즘에서 사용되기도 하므로 중요하다. union 연산을 확인하며, 서로 다른 두 원소에 대해 합집합(같은 그룹으로 합치기)을 진행할 땐, 각각의 루트노드를 찾아 큰 루트노드가 더 작은 루트를 가리키도록 구현한다. 시간 복잡도: O(V + M(1 + log2-m/vV)) 서로소 집합 구현 코드 ..
-
[백준] 2141번: 우체국(Python)Algorithm PS👩🏻💻/백준 2023. 5. 22. 22:42
문제 링크 https://www.acmicpc.net/problem/2141 2141번: 우체국 첫째 줄에 N(1 ≤ N ≤ 100,000)이 주어진다. 다음 N개의 줄에는 X[1], A[1], X[2], A[2], …, X[N], A[N]이 주어진다. 범위는 |X[i]| ≤ 1,000,000,000, 1 ≤ A[i] ≤ 1,000,000,000 이며 모든 입력은 정수이다. www.acmicpc.net 풀이 풀이 설명 - 분류 : 그리디 & 누적합 처음엔 '공유기 설치(이진탐색)'문제와 비슷해서 이건 '거리', '사람 수' 둘다 고려해야하는 이진탐색인가? 로 시작했지만, 결국 거리는 정렬 말고는 필요없는 문제였다. 처음엔 이해가 안돼서 여러 풀이를 봤는데 다들 사람의 총합/2를 넘는 부분에 놓으면 된다고..
-
[백준] 2212번: 센서 (Python)Algorithm PS👩🏻💻/백준 2023. 5. 15. 16:37
문제 링크 https://www.acmicpc.net/problem/2212 2212번: 센서 첫째 줄에 센서의 개수 N(1 ≤ N ≤ 10,000), 둘째 줄에 집중국의 개수 K(1 ≤ K ≤ 1000)가 주어진다. 셋째 줄에는 N개의 센서의 좌표가 한 개의 정수로 N개 주어진다. 각 좌표 사이에는 빈 칸이 하나 있 www.acmicpc.net 풀이 알고리즘 [그리디] 여러 센서의 후보들을 묶는 것으로 생각하면 k개의 묶음을 만들면 된다. 센서를 오름차순하여 좌표 순으로 놓는다. ex. [1, 6, 9, 3, 6, 7] -> [1, 3, 6, 6, 7, 9] 원소간의 차를 표현한 리스트를 만든다. -> diff = [2, 3, 0, 1, 2] 2개의 묶음을 만들기 위해선 1개의 간격을 버리면 된다. -..
-
[백준] 14719번: 빗물 (Python)Algorithm PS👩🏻💻/Implementation 2023. 5. 14. 18:08
문제 링크 https://www.acmicpc.net/problem/14719 14719번: 빗물 첫 번째 줄에는 2차원 세계의 세로 길이 H과 2차원 세계의 가로 길이 W가 주어진다. (1 ≤ H, W ≤ 500) 두 번째 줄에는 블록이 쌓인 높이를 의미하는 0이상 H이하의 정수가 2차원 세계의 맨 왼쪽 위치 www.acmicpc.net 풀이 풀이 설명 이중 배열을 만들어 벽은 1, 빈곳은 0 설정 양쪽이 벽으로 둘러싸여야 빗물이 고이므로, 현재 좌표 기준 왼쪽이 벽이고 현재가 비어있으면 현재 좌표를 리스트(starts)에 넣는다. 오른쪽으로만 탐색(bfs)하여 벽과 부딪힌 경우만 result에 빈 칸의 수를 넣는다. 풀이 코드 n, m = map(int, input().split()) walls = ..
-
[백준] 21314번: 민겸 수(Python)Algorithm PS👩🏻💻/백준 2023. 5. 14. 14:29
문제 링크 https://www.acmicpc.net/problem/21314 21314번: 민겸 수 민겸 수 하나가 주어진다. 민겸 수는 대문자 M과 K로만 이루어진 문자열이며, 길이는 3,000을 넘지 않는다. www.acmicpc.net 풀이 풀이 설명 우선 문장에 K 포함 유무에 따라 나뉜다. K가 없는 경우 -> M만 있다는 뜻. result를 바로 구할 수 있다. ex. MMM인 경우 max: 111, min: 100 K가 있는 경우, K를 기준으로 나뉘기 수가 결정되므로 K의 위치를 담은 리스트(k_pos)를 전달해준다. def find_max(k_pos) # max 값을 찾는다. k를 포함하여 $5*10^N$ 꼴로 정리한다. 문장의 끝이 k가 아니라면, m으로 끝난다는 뜻이므로 마지막 k의..