일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 29 | 30 | 31 |
- 백준_11659
- 백준1940
- 백준
- 구간합
- 백준11720
- 백준2023
- 자바
- 백준12891
- 백준2750
- 백준_구간합구하기
- Java
- 백준1427
- 정렬알고리즘
- 백준11399
- 백준2751
- 백준13023
- 백준1874
- 버블소트
- 백준17298
- stack
- 백준11003
- 백준1260
- 백준11286
- 백준10998
- 백준11724
- 백준1377
- 백준1253
- 백준1546
- 백준1517
- 백준2018
- Today
- Total
목록전체 글 (26)
HOONDOC

1427번: 소트인사이드 🌱풀이 알고리즘 선택 정렬 알고리즘이다. 해당 루프에서 탐색할 배열 내 최댓값의 값을 찾는다. Swap을 통해 차례대로 앞쪽에 배정해준다. 메모리 : 11492KB, 시간 : 80ms package book_algoTEst; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; public class BOJ_1427 { public static void main(String[] args) throws IOException { BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); StringB..

1377번: 버블 소트 🌱풀이 알고리즘 버블 소트 알고리즘에서 Swap이 일어나지 않는 루프는, 정렬이 완료된 상태다. 한 루프당 데이터가 왼쪽으로 이동할 수 있는 최대값은 1이다. 데이터 정렬 후와 정렬 전의 인덱스를 비교하여 최대로 줄어든(왼쪽으로 이동한) 값을 찾는다. Swap이 일어나지 않는지 확인하는 과정에서 1루프가 추가되므로 인덱스 차이 + 1을 출력한다. 아예 버블 소트를 구현하고 정렬해나가는 과정에서 완료된 시점을 찾아 루프를 종료하면 시간 초과가 난다. 자바가 제공하는 Array 라이브러리의 Arrays.sort 는 시간 복잡도가 O(nLOGn) 이므로 시간 초과가 나지 않는다. 메모리 : 70244KB, 시간 : 1540ms package book_algoTEst; import jav..

2750번: 수 정렬하기 🌱풀이 알고리즘 버블 소트 알고리즘을 구현한다. 최상단 반복문은 루프의 숫자를 의미한다. 이 때 반복 변수인 i는 실제 배열을 순회하는데 영향을 주므로 0에서 N-2까지 순회하도록 한다. 루프 반복문 내 반복문은 배열을 순회하는 반복문이다.배열의 인덱스가 가장 큰 순서대로 정렬이 완료되기 때문이다. i의 값에 따라 j가 순회하는 최대 인덱스는 순차적으로 감소한다. swap 알고리즘을 구현할 때 헷갈리지 않도록 주의하자. 메모리 : 12712KB, 시간 : 100ms import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; public class Main { public s..

11286번: 절댓값 힙 🌱풀이 우선순위 큐를 사용해겠다는 생각은 했는데, 커스터마이징을 어떻게 해야 하는지 몰랐다. 우선순위의 기준을 입력하는 방식을 배웠던 문제였다. 💡 메모리 : 29428KB, 시간 832ms import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.util.PriorityQueue; public class Main { public static void main(String[] args) throws NumberFormatException, IOException { BufferedReader br = new BufferedReader(new InputS..

2164번: 카드2 🌱풀이 어려운 문제는 아니었다. Queue는 선입선출이므로, 꺼내고 다시 넣으면 가장 마지막 순서로 배정된다. Queue의 크기가 1이 될 때까지 반복해주면 된다. 💡 메모리 : 51024KB, 시간 148ms import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.util.LinkedList; import java.util.Queue; public class Main { public static void main(String[] args) throws NumberFormatException, IOException { BufferedReader br = ..

17298번: 오큰수 🌱풀이 알고리즘 stack에는 정답 배열의 인덱스를 저장한다. 최초 0번 인덱스는 stack에 저장되고, 변수 i가 1 → N인 반복문을 선언한다. 만약 입력된 숫자를 기준으로 i번 인덱스의 값이 stack 내 top에 위치한 인덱스에 해당하는 배열의 값(…)보다 크면 최초의 오큰수의 해당한다. 3번에 해당하는 경우 stack에서 pop을 사용해 top을 꺼내고, 애초에 인덱스를 넣어뒀으므로 정답 배열의 인덱스로, 입력될 값은 number[i]로 저장한다. 3-4번을 stack을 계속 꺼내면서 조건을 충족하지 않을때까지 반복한다. N번까지 반복되었음에도 stack에 남아있는 값은 오큰수가 없으므로 -1을 넣어준다. 회고 Stack은 후입선출의 자료구조다. 해당 문제에서는 후입선출이 ..

1874번: 스택 수열 🌱풀이 알고리즘 1부터 1씩 증가하는 자연수 Stack 연산을 통해 입력되는 연산을 표현할 수 있는지 묻는 문제. 현재 자연수가 입력 값보다 작으면 같아질 때까지 반복한다. 현재 자연수가 입력 값보다 크면 stack.pop()을 통해 stack에 들어있는 값을 빼가며 확인한다. 만약 현재 자연수가 입력 값보다 크면서, stack.pop()으로 나온 값이 현재 자연수보다 작으면 표현이 불가능한 순열이므로 “NO”를 출력해야한다. 현재 자연수가 입력 값보다 크면 할 수 있는 행동은 pop 메소드를 통해 stack의 값을 빼는 것(stack엔 값이 차례대로 쌓여있으므로 뺄수록 작아진다)밖에 없다. 이 때 stack에 쌓인 최상단, 즉 최고 값이 현재 자연수보다 작으면 해당 자연수를 표현..

11003번: 최솟값 찾기 🌱풀이 💡 시간 초과 import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.IOException; import java.io.InputStreamReader; import java.io.OutputStreamWriter; import java.util.Deque; import java.util.LinkedList; import java.util.StringTokenizer; public class Main { public static class Node{ public int value; public int index; Node(int value, int index){ this.value = va..