일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |
- 동적계획법
- 프로그래머스
- 알고리즘
- 연결요소
- DynamicProgramming
- 도커
- n진법게임
- 11724
- 링킹
- 자바
- 이진트리
- 이분그래프
- Bottom Up
- 백준
- dfs
- 1707
- 포스트오더
- 전공자따라잡기
- 완전이진트리
- 9093
- Java
- 포화이진트리
- BFS
- 피보나치
- JAVA_HOME
- 바인딩
- 웹개발
- 순회
- 그래프
- 인오더
- Today
- Total
목록개발지식/Algorithm (14)
물음표 살인마
큐란? 한쪽 끝에서만 자료를 넣고 반대쪽 끝에서만 뺄 수 있는 자료구조 먼저 넣은 것이 먼저 나오기 때문에 FIFO(First In First Out) 이라고도 한다. push: 큐에 자료를 넣는 연산 pop: 큐에서 자료를 빼는 연산 front: 큐의 가장 앞에 있는 자료를 보는 연산 back: 큐의 가장 뒤에 있는 자료를 보는 연산 empty: 큐가 비어있는지 아닌지를 알아보는 연산 size: 큐에 저장되어있는 자료의 개수를 알아보는 연산 bfs 알고리즘에서 많이 쓰이기 때문에 필수적으로 알아두어야 하는 자료구조이다. java의 경우 java.util.Queue를 사용하면 된다. Java로 큐 구현하기(백준 10845) int[] arr = new int[10000]; int begin = 0; in..
https://www.acmicpc.net/problem/9093 9093번: 단어 뒤집기 첫째 줄에 테스트 케이스의 개수 T가 주어진다. 각 테스트 케이스는 한 줄로 이루어져 있으며, 문장이 하나 주어진다. 단어의 길이는 최대 20, 문장의 길이는 최대 1000이다. 단어와 단어 사이에는 www.acmicpc.net 단어뒤집기를 푸는 3가지 방법 1. StringBuilder 2. for문 3. stack 1. StringBuilder sb.append(new StringBuilder(str).reverse()).append(" "); 2. for문 for(int j = str.length() ; j > 0 ; j--){ sb.append(str.charAt(j-1)); } sb.append(" ");..
스택이란? 한 쪽 끝에서만 자료를 넣고 뺄 수 있는 자료구조 마지막에 넣은 것이 가장 먼저 나오기 때문에 LIFO(Last In First Out) 이라고도 한다. push: 스택에 자료를 넣는 연산 pop: 스택에서 자료를 빼는 연산 top: 스택의 가장 위에 있는 자료를 보는 연산 empty: 스택이 비어있는지 아닌지 확인하는 연산 size: 스택에 저장되어있는 자료의 개수를 알아보는 연산 Java로 스택 구현하기(백준 10828) int[] arr = new int[10000]; int cur = 0; 자료를 넣을 배열과 스택의 스택의 크기를 담을 변수를 선언해준다. void push(int x){ arr[cur] = x; cur++; } push: 배열에 입력된 자료를 저장하고 크기를 담은 변수를..
정의 - 수학과 컴퓨터 과학, 언어학 또는 관련 분야에서 어떠한 문제를 해결하기 위해 정해진 일련의 절차나 방법을 공식화한 형태로 표현한 것을 말한다. 효율성 중요도: 수행 시간 > 사용한 메모리 > 코드의 길이 1. 시간이 30분 걸린다면 정말로 30분 실행시켜야 하지만, 메모리가 64G 필요하다면 램을 구매하면 된다. 2. 하지만 상황에 따라 무엇이 중요한지는 다르다. 문제의 크기 10명이 접속하는 사이트를 만드는 것과 10만명이 동시 접속하는 사이트를 만드는 법은 다르다. 문제를 해결할 때도 문제의 크기에 따라 알맞은 방법을 선택하는 것이 좋다. 시간복잡도 입력의 크기 N에 대해 최악의 경우에 걸리는 시간을 O(Big O Notation)으로 표기한다. 문제를 풀기 전에 먼저 시간복잡도를 계산해보고..
안녕하세요 오늘은 알고리즘을 풀다보면 자연스럽게 만나게 되는 dp에 대해 알아보도록 하겠습니다. DP, Dynamic Programming, 이란 복잡한 문제를 간단한 여러 개의 문제로 나누어 푸는 방법을 말합니다. 분할정복과 비슷하지만 분명한 차이점은 dp에서는 작은 문제들이 반복되며, 그것을 이용해 문제를 풀어나간다는 점입니다. dp를 사용할 수 있는 가정은 두가지가 있습니다. 1. 큰 문제를 작은 문제로 분할 가능해야 하며, 2. 작은 문제에서 구한 정답이 그것을 포함하는 큰 문제에서도 동일해야 합니다. 그럼 본격적으로 피보나치 수열을 들여다보겠습니다. 저는 피보나치 수열의 26번째자리에 있는 값을 구하고 싶습니다. 이는 dp[26]을 구하기 위한 극히 일부분만을 나타낸 그림임에도 불구하고 dp[2..
안녕하세요 오늘은 백준 1000번을 풀다 알게된 PS에서 Scanner을 쓰면 안되는 이유에 대해 글을 써봅니다. 너무 심심한 주말, 알고리즘 알못인 저는 무작정 백준에 들어가 쉬운 문제부터 풀어보기로 합니다. A+B??? 오잉? 이건 너무 쉬운 거 아닌가? 그리고 처음 자바를 배웠던 때를 떠올리며 Scanner을 사용해 아래의 코드를 작성합니다. package mathematics; import java.util.Scanner; public class Baekjoon1000 { public static void main(String[] args) { Scanner sc = new Scanner(System.in); int a = sc.nextInt(); int b = sc.nextInt(); Syste..