[BOJ] 백준 17299 오등큰수 (JAVA)
Algorithm/- Baekjoon2024. 4. 1. 14:43[BOJ] 백준 17299 오등큰수 (JAVA)

📑 문제🌱 아이디어위 문제에서 말하는 “오등큰수” 는 NGF(i) 일 때 자기 자신 오른쪽에 있는 숫자 중 자신보다 많은등장 횟수를 가지는 숫자 중 가장 왼쪽에 있는 수이다. 예를 들어보자! ex.) 1 1 1 1 3 1 1인 경우 NGF(3) = 1이다. 반대로 NGF(1) = -1이다, 1보다 큰 등장 횟수가 없기 때문이다.그리고 출력은 입력된 순서를 지켜야 하기 때문에 -1 -1 -1 -1 1 -1 -1이다. 위 문제는 스택을 사용해야 한다. 내가 스택을 사용해야겠다고 유추한 근거는 두 가지이다 1. 답을 정하는 조건이 자신의 오른쪽 즉 방향이 정해져 있다.2. N ≤ 1,000,000이며 이는 O(N^2)를 가지는 단순한 구조로 구현 불가능 -> 시간 초과 발생 결론은 효율적인 구조 ex.) ..

[BOJ] 백준 6198 옥상 정원 꾸미기 (JAVA)
Algorithm/- Baekjoon2024. 3. 5. 11:00[BOJ] 백준 6198 옥상 정원 꾸미기 (JAVA)

📑 문제🌱 아이디어관리인이 보는 방향은 항상 현재 자리 -> 오른쪽으로 본다. 경험상 이러한 구조는 스택으로 구현가능하다. 이 문제는 N ≤ 80000 이므로 O(N^2)이 소요되는 알고리즘으로는 풀 수 없다. 즉 이미 계산된 값을 이용해서 다음값을 구하는 방식으로 중복계산을 줄여 시간을 단축해야 한다. 스택과 다이나믹 프로그래밍을 사용해서 풀어보자! 예제 1번을 통해 논리의 흐름을 그려 보았다 말로 하는 것보다 효과적일 것이라 생각한다.너무 길어서 읽기 힘들겠지만 천천히 보다 보면 흐름이 보일 것이다 1. dp 배열 = 각 위치에서 볼 수 있는 옥상 수2. stack1, stack2 = 빌딩 번호3. arr1 배열 = 빌딩 높이   5번 빌딩과 6번 빌딩의 높이를 비교합니다1 ) 5번 빌딩이 더 클..

[BOJ] 백준 1781 컵라면 (JAVA)
Algorithm/- Baekjoon2024. 2. 27. 18:11[BOJ] 백준 1781 컵라면 (JAVA)

📑 문제🌱 아이디어데드라인 별 가장 최적의 값을 선택하여 최댓값을 출력하는 문제! 그리디 알고리즘이다! 정렬속도가 빠른 우선순위 큐를 이용해 보자! 문제 자체는 이해하기도 쉽고 어렵지 않았다. 덕분에 그리디, 우선순위큐를 이용하면 되겠다는 생각도 빨리 도출해 내었던 문제이다.하지만 깊게 생각을 해야 하는 문제였다 ㅠ 다음 예제를 보자 반례 1) 41 502 303 603 70ans = 180 가장 처음 구현했을 때 데드라인을 1 ~ N까지 오름차순 데드라인별 최적값을 구하는 형식으로 풀었지만결과는 150이 나왔다. 50 + 30 + 70 이렇게 컵라면을 획득한 것이다. 하지만 문제의 정답은 50 + 60 + 70 = 180 이다. 즉 가장 낮은 데드라인이 항상 최적의 값을 보장하지 않기 때문에N ~ ..

[BOJ] 백준 2493 탑 (JAVA)
Algorithm/- Baekjoon2024. 1. 22. 00:41[BOJ] 백준 2493 탑 (JAVA)

📑 문제 🌱 아이디어수열의 오른쪽 끝에서 왼쪽으로 탐색하면서 두 수를 비교하면서 스택에 push, pop을 한다! 이 문제를 풀기 위해서 공식을 총 2가지로 단순화했다 1. 왼쪽 숫자보다 오른쪽 숫자가 크다면 -> 스택에 push2. 왼쪽 숫자보다 오른쪽 숫자가 작다면 -> 스택에 pop 하지만 출력조건은 레이저를 수신한 탑의 인덱스를 출력하기 때문에 스택에는 인덱스 번호에 해당하는 숫자가 아닌숫자에 해당하는 인덱스 번호를 입력한다. 즉 arr1 [i]가 아니라 'i'를 스택에 입력을 해야 한다.🌱 코드 및 풀이1. 왼쪽 숫자보다 오른쪽 숫자가 크다면 -> 스택에 push   stk.push(i)를 통해 인덱스 번호 입력2. 왼쪽 숫자보다 오른쪽 숫자가 작다면 -> 스택에 pop   while을 통..

[BOJ] 백준 25206 너의 평점은 (JAVA)
Algorithm/- Baekjoon2023. 12. 11. 19:18[BOJ] 백준 25206 너의 평점은 (JAVA)

📑 문제🌱 아이디어평균학점을 구하는 공식만 안다면 전혀 어렵지 않은 문제이다. 하지만 위 지문을  잘 못 읽어서 "P", " F" 둘 다 제외하는 것으로 이해하고 말아 버렸다. 다음엔 또박또박 읽자. 요약하면 "F" 점수까지 계산 해줘야 한다.평균학점 = (과목평점*과목이수학점 +....)/총 이수학점 = 전공평점평균학점을 구하는 공식과 HashMap을 이용할 안다면 전혀 어렵지 않은 문제이다(성능도 높힐 수 있다.)  🌱 코드 및 풀이HashMap에 등급별 과목점수를 모두 저장한다. grade [i]. equals("P") key값이 "P"인 경우는 제외하고 file.get(grade [i])* num [i]에서 과목 평점을 계산합니다. 만약 sum == 0이라면 모든 과목이 "P" 등급이기 때문..

image