본문 바로가기
728x90

Problem Solving103

[Swift] 프로그래머스 평행(lv. 0) [Swift] 프로그래머스 평행(lv. 0) 1. 문제 https://school.programmers.co.kr/learn/courses/30/lessons/120875 2. 접근 두 점을 공통으로 지나는 '일차함수'를 생각해보았다. 선분을 일차함수로 생각해본다면, 두 점 사이의 기울기를 비교하고 그 기울기가 같으면 1을 리턴하고 그렇지 않으면 0을 리턴하면 된다. (x1, y1), (x2, y2) 좌표가 있을 경우, 그 기울기는 아래와 같다. 기울기 = (y1 - y2) / (x1 - x2) 모든 좌표를 서로 대조해보아야 하기 때문에, 반복문을 돌면서 모든 점들의 기울기 쌍을 구해본다. 아래에서는 tempDotsArray 라는 dots의 원소 타입을 Double로 바꾸어 배열을 만든다. 이중 반복문을.. 2023. 1. 11.
[백준] 1918 후위 표기식 python 알고리즘 문제 문제 1918. 후위 표기식 1. 나의 코드와 발상 과정 최근 자료구조 공부를 하다가 기본 자료구조인 스택을 배웠는데, 대표적인 활용 예시로 괄호와 계산기에 적용을 연습하였다. 연산자와 피연산자, 이항연산자, 단항연산자, infix 수식, postfix 수식을 알 수 있었는데, infix 수식에서 postfix 수식으로 바꿀 때, 연산자 스택과 피연산자 스택을 따로 두고 섞어 담아 출력하면 postfix 수식이 된다는 것을 알 수 있었다. 그 기억을 살려 아래와 같이 두 개의 스택을 놓고 코딩을 진행했다. n = list(input()) stack = [] outstack = [] operator = {'(' : 0, '+' : 1, '-' : 1, '*' : 2, '/' : 2} for i in n: .. 2022. 5. 15.
[Algorithm] 5-(3). 정렬 - 계수 정렬 [Algorithm] 5-(3). 정렬 - 계수 정렬 특정한 조건이 부합할 때만 사용가능하다. 매우 빠르게 동작하는 정렬 알고리즘이다. 동일한 값을 가지는 데이터가 여러 개 등장할 때 효과적으로 사용할 수 있다. O(N+K) 시간 복잡도를 가진다. 각각의 데이터가 몇 번 등장했는지 세어서 정렬을 하는 구조이다. 리스트를 하나 더 만들어야 하지만, 조건만 맞는다면 빠른 모습을 보여준다. 때에 따라 극악의 비효율을 제공하기도 한다. 사용 예시 2022.07.03 - [알고리즘/재미있는 코딩놀이] - 로또 번호 추출기 3탄(자바) 로또 번호 추출기 3탄(자바) 로또 번호 추출기 3탄(자바) 인간의 욕심은 끝이 없고 무한한 성능 향상을 꿈꾼다. 자바의 문법들을 다시 상기하고, 메모리 구조에 대한 것들을 하나씩 .. 2022. 4. 27.
[Algorithm] 5-(2). 정렬 - 퀵 정렬 [Algorithm] 5-(2). 정렬 - 퀵 정렬 기준 데이터를 설정하고 그 기준보다 큰 데이터와 작은 데이터의 위치를 바꾸는 방법이다. 일반적 상황에서 가장 많이 사용된다. 병합 정렬과 더불어 대부분 프로그래밍 언어의 정렬 라이브러리의 근간이 되는 알고리즘이며, 가장 기본적 퀵 정렬은 첫 번째 데이터를 기준 데이터(피봇)로 설정한다. 피봇값 설정 -> 정렬 -> 분할 -> 왼쪽 데이터 퀵정렬 -> 오른쪽 데이터 퀵정렬 5 7 9 0 3 1 6 2 4 8 첫번째 원소가 피봇으로 설정된다. 이상적인 경우 시간 복잡도가 O(NlogN)이 될 수 있다. 데이터 확인 개수가 절반씩 줄어들기 때문이다. 그러나, 최악의 경우 O(n2)의 시간 복잡도를 가진다. 2022. 4. 27.
[Algorithm] 5-(1) 정렬 - 선택 정렬, 삽입 정렬 [Algorithm] 5-(1) 정렬 - 선택 정렬, 삽입 정렬 1. 선택 정렬 처리되지 않은 데이터 중 가장 작은 데이터를 선택해 맨 앞에 있는 데이터와 바꾸는 것을 반복한다. 선형탐색으로 처리를 한다. 1) 구현 방법 이중 반복문을 통해 선택 정렬을 구현할 수 있다. 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_index] = array[min_index], array[i] #스와프 2) 선택 정.. 2022. 4. 27.
[Algorithm] 4-(4) BFS(Breadth-First Search) [Algorithm] 4-(4) BFS(Breadth-First Search) 너비 우선 탐색이라고 부르며, 그래프에서 가까운 노드부터 우선 탐색하는 알고리즘이다. BFS는 큐 자료구조를 이용한다. 동작 과정 탐색 시작 노드를 큐에 삽입하고 방문 처리를 한다. 큐에서 노드를 꺼낸 뒤에 해당 노드의 인접 노드 중에서 방문하지 않은 노드를 모두 큐에 삽입하고 방문 처리한다. 더 이상 (2)번 과정을 수행할 수 없을 때 까지 반복한다. 최단 거리 목적을 달성하기 위한 알고리즘으로 사용되기도 한다. 대표 문제 https://www.acmicpc.net/problem/1260 1260번: DFS와 BFS 첫째 줄에 정점의 개수 N(1 ≤ N ≤ 1,000), 간선의 개수 M(1 ≤ M ≤ 10,000), 탐색을 .. 2022. 4. 27.
728x90