본문 바로가기

✔️ Algorithm26

[백준/Java] 17299번 : 오등큰수 https://www.acmicpc.net/problem/17299 17299번: 오등큰수 첫째 줄에 수열 A의 크기 N (1 ≤ N ≤ 1,000,000)이 주어진다. 둘째에 수열 A의 원소 A1, A2, ..., AN (1 ≤ Ai ≤ 1,000,000)이 주어진다. www.acmicpc.net ✔️ 풀이과정 해당 문제는 자료구조의 스택을 사용해서 푸는 문제이다. 문제를 처음 접했을 때 꽤나 간단한 문제인 줄 알았으나 계속해서 시간초과가 발생했다. 처음 문제를 풀었을 때 작성했던 코드는 다음과 같다. 대강 코드를 설명하자면, 처음 입력값을 stack이라는 스택에 넣고, count라는 배열을 선언하여 stack에 입력한 값들이 각각 몇 갠지 카운트한 값을 넣어주었다. 다음으로 result라는 스택을 선.. 2023. 3. 24.
[백준/Java] 1541번 : 잃어버린 괄호 https://www.acmicpc.net/problem/1541 1541번: 잃어버린 괄호 첫째 줄에 식이 주어진다. 식은 ‘0’~‘9’, ‘+’, 그리고 ‘-’만으로 이루어져 있고, 가장 처음과 마지막 문자는 숫자이다. 그리고 연속해서 두 개 이상의 연산자가 나타나지 않고, 5자리보다 www.acmicpc.net ✔️ 풀이과정 해당 문제는 백준에서 그리디 알고리즘(Greedy Algorithm)으로 분류된 문제이다. 따라서 각 단계에서 가장 최적인 것을 선택하는 방식으로 풀이하려고 했다. 먼저 입력값으로 받은 문자열을 StringTokenizer 메소드를 사용하여 피연산자와 연산자로 구분해 각각 num, oper 리스트에 저장했다. 다음으로 입력한 값에서 '-' 연산자가 나오면 그 뒤 피연산자들의 연.. 2023. 3. 5.
[백준/Java] 11399번 : ATM https://www.acmicpc.net/problem/11399 11399번: ATM 첫째 줄에 사람의 수 N(1 ≤ N ≤ 1,000)이 주어진다. 둘째 줄에는 각 사람이 돈을 인출하는데 걸리는 시간 Pi가 주어진다. (1 ≤ Pi ≤ 1,000) www.acmicpc.net ✔️ 풀이과정 해당 문제는 백준에서 그리디 알고리즘(Greedy Algorithm)으로 분류된 문제이다. 정답 비율이 높은 만큼 정렬을 사용하면 쉽게 풀리는 문제이다. 먼저 각 사람이 돈을 인출하는 데 걸리는 시간을 배열 p로 선언한 뒤 값을 입력받고, sort() 메소드를 사용하여 오름차순으로 정렬해 주었다. 다음으로 각 배열의 값을 이전 배열 값까지의 합으로 다시 설정해 준 뒤, Stream의 sum() 메소드를 사용하여 .. 2023. 3. 4.
[백준/Java] 11047번 : 동전 0 https://www.acmicpc.net/problem/11047 11047번: 동전 0 첫째 줄에 N과 K가 주어진다. (1 ≤ N ≤ 10, 1 ≤ K ≤ 100,000,000) 둘째 줄부터 N개의 줄에 동전의 가치 Ai가 오름차순으로 주어진다. (1 ≤ Ai ≤ 1,000,000, A1 = 1, i ≥ 2인 경우에 Ai는 Ai-1의 배수) www.acmicpc.net ✔️ 풀이과정 그리디 알고리즘(Greedy Algorithm)의 가장 대표적인 문제이다. 그리디 알고리즘이란 각 단계에서 가장 최적인 것을 선택하는 알고리즘을 말하는데, 해당 알고리즘을 사용하기 위해서는 문제에서 이전의 선택이 이후의 선택에 영향을 주지 않는 독립적인 상태여야 하고, 최종적인 최적해가 부분 문제에 대한 최적해여야 한다.. 2023. 3. 4.