Algorithm
-
[Python] 백준 1339 단어 수학 - 그리디 알고리즘 / enumerate(), set(), extend(), Counter()Algorithm 2024. 4. 28. 17:56
enumerate(): 파이썬에서 for문을 사용할 때 인덱스와 원소의 값을 같이 얻을 수 있는 내장함수 set(): 파이썬에서 배열(리스트)에서 중복된 원소를 제거하고, 각 원소의 고유값을 얻으려면 set 데이터 타입을 사용할 수 있습니다. set은 중복을 허용하지 않으므로, 리스트를 set으로 변환하면 자동으로 중복된 원소가 제거됩니다. 그 후, 필요에 따라 다시 리스트로 변환할 수 있습니다. extend(): 파이썬의 extend() 메소드는 리스트에 다른 iterable(예: 리스트, 튜플, 집합 등)의 모든 항목을 추가하는 데 사용됩니다. 이 메소드는 원본 리스트를 직접 수정합니다. Counter(): Counter는 Python의 collections 모듈에서 제공하는 특수한 딕셔너리 서..
-
[Python] 백준 9012번 괄호 - 스택Algorithm 2024. 4. 14. 17:09
초기 접근 방식 처음 시도했던 오답 코드 - IndexError from sys import stdin as s s = open("input.txt", "rt") T = int(s.readline().strip()) # 괄호를 한 줄씩 입력받을 스택 stack = [] for i in range(T): # 괄호 문자열을 한줄 씩 입력받는데, stack에 ()가 완성될 때마다 pop하고 최종적으로 아무것도 없으면 YES, 그렇지 않으면 NO를 stack에 넣기 # arr = 괄호 문자열 한 줄 / 괄호 한 줄도 한 글자씩 끊어서 입력받기 -> list활용 arr = list(s.readline().strip()) for j in range(len(arr)): stack.append(arr[j]) if st..
-
[Python] 백준 10773번 제로 - 스택Algorithm 2024. 4. 13. 17:35
손으로 먼저 코드를 적어본 후 코드를 타이핑 했는데, 왠지 모르게 이 방법이 익숙하고 편하다. 쉬운 문제라 별 거 없는 손코딩 정답 코드.py from sys import stdin as s s = open("input.txt", "rt") K = int(s.readline().strip()) stack = [] for _ in range(K): number = int(s.readline().strip()) if number == 0: stack.pop() else: stack.append(number) print(sum(stack)) 입력값이 0이면 stack.pop()을 해서 이전 값을 지우고, 0이 아닐 경우 stack.append() 해서 스택에 숫자를 추가한 후 마지막으로 sum()을 이용하여 ..
-
[Algorithm] DFS(깊이 우선 탐색) & BFS(너비 우선 탐색)Algorithm 2024. 4. 13. 17:02
DFS : Depth-First Search, 깊이 우선 탐색이라고도 부르며 그래프에서 깊은 부분을 우선적으로 탐색하는 알고리즘이다. DFS는 스택 자료구조를 이용하며 구체적인 동작 과정은 다음과 같다. 1. 탐색 시작 노드를 스택에 삽입하고 방문 처리를 한다. 2. 스택의 최상단 노드에 방문하지 않은 인접 노드가 있으면 그 인접 노드를 스택에 넣고 방문 처리를 한다. 방문하지 않은 인접 노드가 없으면 스택에서 최상단 노드를 꺼낸다. 3. 2번의 과정을 더 이상 수행할 수 없을 때까지 반복한다. ** 방문처리란? 스택에 한 번 삽입되어 처리된 노드가 다시 삽입되지 않게 체크하는 것을 의미한다. 방문 처리를 함으로써 각 노드를 한 번씩만 처리할 수 있다. Step 1. 시작 노드인 '1'을 스택에 삽입하고..
-
[Algorithm] 선택 정렬, 삽입 정렬, 퀵 정렬, 계수 정렬Algorithm 2024. 4. 2. 15:10
선택 정렬 (Selection Sort) 선택정렬이란? - 주어진 데이터 중 가장 작은 데이터를 선택한 후 맨 앞에 있는 데이터와 바꾸고, 그 다음으로 작은 데이터를 선택한 후 처리되지 않은 데이터 중 가장 앞에 있는 데이터와 바꾸는 과정을 반복하는 정렬이다. * 매번 가장 작은 것을 선택한다는 의미에서 선택 정렬(Select Sort) 알고리즘이라고 한다. array = [7, 5, 9, 0, 3, 1, 6, 2, 4, 8] for i in range(len(array)): min_index = i #가장 작은 원소의 인덱스 for j in range(i+1, len(array)): if array[min_index] > array[j]: min_index = j array[i], array[min_i..
-
[JAVA] 백준 11721 열 개씩 끊어 출력하기 - charAt()Algorithm 2023. 6. 17. 22:48
python으로 알고리즘을 풀다가 이제 슬슬 java로 풀어야 할 거 같아서 하루에 JAVA 브론즈 한 문제, Python 실버 or 골드 한 문제를 풀고 있다. 정답 코드.java import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; public class p11721 { public static void main(String[] args) throws IOException { BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); String input = br.readLine(); // System.out.pri..
-
[Python] 백준 21921 블로그 - 누적합(prefix sum) / 슬라이딩 윈도우Algorithm 2023. 6. 14. 03:57
누적합(Prefix sum)이란? : 말 그대로 누적된 합을 구하는 것이다. arr = [1, 4, 6, 8, 4, 2] 예를 들면 배열이 위와 같이 주어진 경우 arr[0]까지의 누적합은 1, arr[1]까지의 누적합은 1+4 = 5, … , arr[4]까지의 누적합은 1+4+6+8+4 = 23이 된다. 슬라이딩 윈도우란? : 위 그림에서 파란색 네모로 묶은 것처럼 배열 내 특정 구간(구간에 포함될 숫자의 개수)을 지정한 후 그 수를 유지한 채 index를 하나씩 밀면서 수들의 합을 파악하는 것이다. arr = list(map(int, sys.stdin.readline().split())) x_sum = sum(arr[:X]) # X일까지의 방문자 수 누적 합 result = x_sum # 처음 담아놓..
-
[Python] 백준 2012 등수 매기기 / 시간 단축, 절대값(abs) 함수Algorithm 2023. 5. 17. 01:41
백준 코드 제출 시 시간 단축 방법 (Python) 개선 전.py arr = [] for _ in range(): arr.append(추가할 값) 기존에는 위와 같은 형태로 배열을 선언한 후 for문을 돌며 append를 이용하여 배열에 값을 추가했다. 그러나 이와 같은 방법으로 할 경우 시간 초과가 자주 발생한다. 개선 후.py arr = [0 for _ in range(N)] for x in range(N): arr[x] = int(sys.stdin.readline()) 배열을 필요한 크기만큼 지정하여 선언한 후 배열의 인덱스에 접근하여 입력받은 값을 바로 추가하는 방법을 이용하면 시간이 단축된다. 파이썬 절대값 abs() 함수 result = 0 for i, j in zip(arr, rank): r..