본문 바로가기

알고리즘107

Udemy - Javascript - Data Structure Udemy - Javascript - Data Structure Doubly Linked Lists (이중 연결 리스트) 자료구조 자료 구조는 데이터에 적용될 수 있는 값들 및 기능 혹은 작업들 사이의 관계를 포함한다 예를 들어 배열을 생각한다 배열 안에는 값들 사이에 관계가 있다 (정렬을 하거나, 값을 추가할 수 있거나 없앨 수 있다) 자료 구조에는 많은 종류가 있고, 각자 쓰임세가 다르다 이중 연결 리스트 이중 연결 리스트는, 다음 노드를 가리키는 간선이 2개이다 즉 앞에 노드와 뒤의 노드를 가리킨다 단점은 매모리를 단일 연결 리스트보다 더 많이 잡아 먹는다 class Node{ constructor(val){ this.val = val; this.next = null; this.prev = null.. 2023. 2. 14.
[Python] 백준 7569 토마토 🧑‍💻 [Python] 백준 7569 토마토 Gold 5 - BFS 무조건 BFS로 풀어야 하는 문제이다 시작점이 하나가 아닐 수 있다 그래서 queue 안에다 시작점들을 모두 찾아서 넣는다 BFS를 할때마다 주변 노드에다 방문 표시 대신 1을 더해서, 더한 숫자를 넣는다 마지막에 다시 탐색을 해야하는데, 0이 하나라도 있으면 -1을 출력하고, 그게 아니면 더한 숫자들 중 제일 큰 숫자에 1을 빼서, 답을 출력한다 7576과 같은 문제이지만, 높이가 추가가 되었다 3중 포문을 쓰되, 3중 리스트 사용법을 익혀야 한 문제풀이 bfs 식 주변을 탐색하고, 주변에 있는 노드 위주로 탐색하기 위해 popleft를 사용 첫 for문 queue에다가 시작 점들을 넣는다 시작점이 하나일 때에는 for문을 돌릴 필요가.. 2023. 2. 13.
[Python] 백준 2644 촌수계산 🧑‍💻 [Python] 백준 2644 촌수계산 Silver 2 - DFS / BFS DFS도 사용할 수 있지만, BFS를 이용해서 촌수를 찾았다 부모 노드와 연결되어 있는 노드들을 먼저 탐색을 한다 탐색을 하면서 같은 번호를 찾으면 된다 문제풀이 BFS를 이용해서, 노드와 연결된 노드들 중에서 end와 같은 번호가 있는지 확인을 해야 한다 여기서 중요한 것은 while문에서 그냥 count를 넣으면, queue에서 뽑을때마다 count에 1이 더해진다 이것을 방지하기 위해, queue에 튜플 형식으로, (노드번호, 촌수)를 넣는다 코드 from collections import deque n = int(input()) start, end = map(int, input().split()) start, en.. 2023. 2. 9.
[Python] 백준 1388 바닥 장식 🧑‍💻 [Python] 백준 1388 바닥 장식 Silver 4 - 그래프 탐색 탐색을 두 번 해야한다. 즉 2중 for문을 두번 사용한다. 탐색을 해서 '-' 가 연결되어 있는 나무 판자와 '|'가 열결되어 있는 나무 판자들의 개수를 센다 단 나무 판자의 너비는 1이다 문제풀이 2중 for문을 두번 순회를 해야 한다. 첫 번째는 가로형 나무 판자들을 찾는 것이고, 두 번째는 세로형 나무 판자들을 찾는 것이다 먼저 '-' 이면 계속 순회를 하되, 다음 판자가 '|'이면, 그 나무 판자를 count에 1을 더해준다 즉 '|'이 나타나면, '-' 의 연속 된 나무 판자가 끊겼다는 것이다 그리로 2중 for문 중 2번째 fo.. 2023. 2. 8.
Programmers 2 레벨 테스트 2 Programmers 2 레벨 테스트 2 문제 배열에 숫자들이 주어진다. 위에 그림처럼 배열은 원형으로 이루어져있다. 배열 안에 있는 연속된 숫자들을 더해서, 더한 숫자들의 개수를 구하는 것 예를 들어 연속된 숫자 하나 : [4], [7], [9], [8] 연속된 숫자 둘 : [8, 4], [4, 7], [7, 9], [9, 8] 연속된 숫자 셋 : [8, 4, 7], [4, 7, 9], [9, 8, 4] 연속된 숫자 넷 : [8, 4, 7, 9] 위의 숫자들을 더하고, 반복된 숫자들을 제거 후, 개수를 세면 된다 문제 풀이 더한 숫자들은 set()에 넣을 것 그렇게 해야, 반복된 숫자들을 알아서 없앨 수 있다 배열 elements가 주어지는데 elements + elements를 해서, 배열을 두 배로.. 2023. 2. 7.
Programmers 2 레벨 테스트 1 Programmers 2 레벨 테스트 1 문제 숫자가 담겨있는 배열이 주어진다. 그 배열 안에 있는 숫자들을 나열하여, 제일 큰 숫자를 만드는 것이다. [6, 20, 4] 가 있다면 6420을 출력하는 것 각 숫자는 1부터 1000까지의 숫자다. 즉 999가 제일 큰 숫자. 문제 풀이 배열 안에 있는 숫자들을 문자열로 만든다 그렇게 하면 숫자의 제일 앞 자리 숫자를 기준으로 순차적으로 배열을 해준다 각 문자열을 4번을 반복시키고, 그 중 4자리를 가지고 온다. 4자리는 1부터 10000까지의 숫자가 주어져서 최대 4자리가 되는 것 4번 반복하는 이유는 (람다를 사용한다) [6, 21, 2, 8] 이 주어졌을 때 먼저 정렬을 하면 [8, 6, 21, 2] 가 된다 제일 크게 만드려면 86221이어야 한다 .. 2023. 2. 7.
Udemy - Javascript - Data Structure Udemy - Javascript - Data Structure 자료구조 자료 구조는 데이터에 적용될 수 있는 값들 및 기능 혹은 작업들 사이의 관계를 포함한다 예를 들어 배열을 생각한다 배열 안에는 값들 사이에 관계가 있다 (정렬을 하거나, 값을 추가할 수 있거나 없앨 수 있다) 자료 구조에는 많은 종류가 있고, 각자 쓰임세가 다르다 ES2015 자료 구조를 클래스로 만들 예정 What is Class? 클래스는 객체를 생성하기 위해 미리 속성 및 메소드를 정의한 블루프린트이다 class Student { constructor(firstName, lastName) { this.firstName = firstName; this.lastName = lastName; } } let firstStudent =.. 2023. 2. 7.
[Python] 백준 1260 DFS와 BFS 🧑‍💻 [Python] 백준 1260 DFS와 BFS Silver 2 - DFS / BFS DFS는 깊이 우선이다. 먼저 한 쪽을 선택해서, 탐색을 하는 것이다 BFS는 넓이 우선 탐색이다. 즉 부모 노드에 여러 자식 노드가 있으면, 바로 연결되어 있는 자식 노드들 부터 탐색을 한다 문제풀이 함수를 사용했다 리스트를 만들고, 리스트 안에 있는 요소들을 오름차순으로 정렬했다 (만약 길이 2개 이상이면, 숫자가 작은 곳부터 탐색을 한다) DFS 같은 경우, 재귀를 이용한다 즉 DFS는 만약 방문을 안 한 노드가 있으면, 그 노드를 다시 DFS(V)를 한다 방문을 했으면 for문은 끝까지 돌아갈 것이다. 즉 for문이 끝났다는 것은, 이미 모든 노드를 한번씩 탐색을 했다는 것이다 BFS 같은 경우 queue를.. 2023. 2. 6.
Udemy - Javascript - Radix Sort Udemy - Javascript - Radix Sort 정렬이란? 데이터가 있으면, 데이터를 숫자 또는 단어별로 오름차순 또는 내림차순으로 나열하는 것이다 정렬을 하는 방법은 다양하다. 정렬하는 방법마다, 정렬을 하는 시간은 다르다 버블, 선택, 삽입 정렬들은 숫자가 계속 늘어날 수록, 속도가 느려진다 반대로 합병 정렬, 퀵 정렬, 지수 정렬은 위의 3개보다 더 빠르다 기수 정렬 버블, 선택, 삽입, 합병, 퀵 정렬들은 모두 숫자들끼리 비교를 하면서, 정렬을 하는 것이다 정수만 정렬이 가는하다 자릿수가 더 많은 숫자가, 더 크다 라는 로직을 사용해서 정렬을 한다 4자리 수는 두 자리 수보다 크다 1 2 - 1의 자리 숫자들은 앞에 숫자가 없음으로 0에다가 넣으면 된다 3 - 0을 보면, 0에 들어오는 .. 2023. 2. 4.