본문 바로가기

PS815

[자바] 백준 14728 - 벼락치기 (java) 목차 문제 : boj14728 필요 알고리즘 DP, 냅색 (배낭 문제) DP로 해결 가능한 문제이다. ※ 제 코드에서 왜 main 함수에 로직을 직접 작성하지 않았는지, 왜 Scanner를 쓰지 않고 BufferedReader를 사용했는지 등에 대해서는 '자바로 백준 풀 때의 팁 및 주의점' 글을 참고해주세요. 백준을 자바로 풀어보려고 시작하시는 분이나, 백준에서 자바로 풀 때의 팁을 원하시는 분들도 보시는걸 추천드립니다. 풀이 dp[x]를 x시간을 사용해 얻을 수 있는 최대 점수라고 해보자. 그렇다면 현재 단원에 대한 K와 S가 주어졌을 때, x시간을 사용해 얻을 수 있는 최대 점수는, '현재까지 파악한 x시간을 사용해 얻을 수 있는 최대 점수', 'x-K 시간까지 얻을 수 있는 최대 점수에 이번 단원.. 2024. 4. 8.
[자바] 백준 23128 - Math (java) 목차 문제 : boj23128 필요 알고리즘 수학, 브루트 포스 (brute force) 약간의 수학적 직관으로 범위를 좁히면, 그냥 브루트 포스로 다 대입해보면 답을 구할 수 있다. ※ 제 코드에서 왜 main 함수에 로직을 직접 작성하지 않았는지, 왜 Scanner를 쓰지 않고 BufferedReader를 사용했는지 등에 대해서는 '자바로 백준 풀 때의 팁 및 주의점' 글을 참고해주세요. 백준을 자바로 풀어보려고 시작하시는 분이나, 백준에서 자바로 풀 때의 팁을 원하시는 분들도 보시는걸 추천드립니다. 풀이 문제에서 제시된 찾고자 하는 내용을 수식으로 나타내보면 다음과 같이 나타낼 수 있다. A와 B는 각각 a_i와 a_j를 뜻한다. C는 임의의 정수이다. 여기서 A, B의 범위는 [1, 1000000.. 2024. 4. 6.
[자바] 백준 14786 - Ax+Bsin(x)=C ② (java) 목차 문제 : boj14786 필요 알고리즘 수학, 이분 탐색 이분 탐색으로 답의 범위를 좁혀가며 상대 오차 10^-9 이하로 찾아주면 된다. ※ 제 코드에서 왜 main 함수에 로직을 직접 작성하지 않았는지, 왜 Scanner를 쓰지 않고 BufferedReader를 사용했는지 등에 대해서는 '자바로 백준 풀 때의 팁 및 주의점' 글을 참고해주세요. 백준을 자바로 풀어보려고 시작하시는 분이나, 백준에서 자바로 풀 때의 팁을 원하시는 분들도 보시는걸 추천드립니다. 풀이 처음에 문제보고 일단 수식이 나오니 무서웠는데, 어차피 y=x랑 y=sin(x) 합친 형태라 대충 그래프 형태가 상상이 되기도 하고, 입력값 범위도 좁아서 도전해보니 생각보다 어렵진 않았다. 풀고보니 '뉴턴-랩슨법' 이라는걸로 풀면 바로 .. 2024. 4. 5.
[자바] 백준 2653 - 안정된 집단 (java) 목차 문제 : boj2653 필요 알고리즘 직관(?), 그래프 이론 어찌보면 그냥 구현 문제이긴 한데, 좀 헷갈릴 수도 있다. ※ 제 코드에서 왜 main 함수에 로직을 직접 작성하지 않았는지, 왜 Scanner를 쓰지 않고 BufferedReader를 사용했는지 등에 대해서는 '자바로 백준 풀 때의 팁 및 주의점' 글을 참고해주세요. 백준을 자바로 풀어보려고 시작하시는 분이나, 백준에서 자바로 풀 때의 팁을 원하시는 분들도 보시는걸 추천드립니다. 풀이 서로 싫어하는 사람들은 빼고, 그냥 서로 좋아하는 사람들끼리 집단을 만든다고 생각해보자. 이 때 문제에서 제시된 바에 따라 논리적으로 맞는지만 확인해주면 된다. 내 로직은 다음과 같다. 이하 로직대로 구현해주면 된다. 1. 1부터 N까지 확인하다가 아직 .. 2024. 4. 4.
[자바] 백준 2015 - 수들의 합 4 (java) 목차 문제 : boj2015 필요 알고리즘 누적 합 (prefix sum), 해시를 사용한 집합과 맵 (hashmap) 누적합과 해시를 사용해 풀 수 있는 문제이다. ※ 제 코드에서 왜 main 함수에 로직을 직접 작성하지 않았는지, 왜 Scanner를 쓰지 않고 BufferedReader를 사용했는지 등에 대해서는 '자바로 백준 풀 때의 팁 및 주의점' 글을 참고해주세요. 백준을 자바로 풀어보려고 시작하시는 분이나, 백준에서 자바로 풀 때의 팁을 원하시는 분들도 보시는걸 추천드립니다. 풀이 문제에서 A배열에서 1부터 X번까지의 누적합을 f(x)라 해보자. 즉 f(x)는 다음과 같다. 이 때 1 2024. 4. 3.
[자바] 프로그래머스 - 분수의 덧셈 (Lv0, Java) 목차 문제 : Programmers - 분수의 덧셈 문제 출처: 프로그래머스 코딩 테스트 연습, https://programmers.co.kr/learn/challenges 필요 알고리즘 구현, 수학 딱히 알고리즘을 필요로 하지 않는다. 분수의 덧셈 방법만 알면 된다. ※ 제 코드에서 왜 main 함수에 로직을 직접 작성하지 않았는지, 왜 Scanner를 쓰지 않고 BufferedReader를 사용했는지 등에 대해서는 '자바로 백준 풀 때의 팁 및 주의점' 글을 참고해주세요. 백준을 자바로 풀어보려고 시작하시는 분이나, 백준에서 자바로 풀 때의 팁을 원하시는 분들도 보시는걸 추천드립니다. 풀이 유클리드 호제법을 이용할수도 있겠으나, 굳이 최대 분자 분모가 1000인 상황에서 쓸 필요는 없다. 그냥 단순 .. 2024. 3. 29.
[자바] 백준 24891 - 단어 마방진 (java) 목차 문제 : boj24891 필요 알고리즘 브루트 포스 그냥 모든 경우를 다 확인해보면 된다. ※ 제 코드에서 왜 main 함수에 로직을 직접 작성하지 않았는지, 왜 Scanner를 쓰지 않고 BufferedReader를 사용했는지 등에 대해서는 '자바로 백준 풀 때의 팁 및 주의점' 글을 참고해주세요. 백준을 자바로 풀어보려고 시작하시는 분이나, 백준에서 자바로 풀 때의 팁을 원하시는 분들도 보시는걸 추천드립니다. 풀이 최악의 경우가 20개의 단어 중 5개를 순서대로 뽑는 경우이므로 20P5 = 20*19*18*17*16 번 정도면 모든 경우를 다 확인할 수 있다. 그리고 마방진임을 확인하는데에는 최대 L^2 이면 확인 가능하다. 결론적으로 그냥 브루트포스로 모든 경우를 확인하면 되는 문제이다. O(.. 2024. 3. 20.
[자바] 백준 2473 - 세 용액 (java) 목차 문제 : boj2473 필요 알고리즘 투 포인터 또는 이분 탐색 투 포인터를 쓰거나, 이분 탐색을 써서 풀 수 있는 문제이다. ※ 제 코드에서 왜 main 함수에 로직을 직접 작성하지 않았는지, 왜 Scanner를 쓰지 않고 BufferedReader를 사용했는지 등에 대해서는 '자바로 백준 풀 때의 팁 및 주의점' 글을 참고해주세요. 백준을 자바로 풀어보려고 시작하시는 분이나, 백준에서 자바로 풀 때의 팁을 원하시는 분들도 보시는걸 추천드립니다. 풀이 우선 처음 생각난 아이디어는, 어차피 n이 5000이므로 2개를 고정시켜놓고, 나머지 하나의 값을 이분 탐색으로 찾는 방법이었다. 이 경우 O(N^2 * logN). 예를들어 현재 고정시켜둔 2개의 값이 -97와 -2라면, -(-97-2) = 99 .. 2024. 3. 20.
[자바] 백준 14503 - 로봇 청소기 (java) 목차 문제 : boj14503 필요 알고리즘 구현, 시뮬레이션, 탐색 (bfs, dfs 등) 그냥 문제에 제시된 대로 구현하는 문제이다. ※ 제 코드에서 왜 main 함수에 로직을 직접 작성하지 않았는지, 왜 Scanner를 쓰지 않고 BufferedReader를 사용했는지 등에 대해서는 '자바로 백준 풀 때의 팁 및 주의점' 글을 참고해주세요. 백준을 자바로 풀어보려고 시작하시는 분이나, 백준에서 자바로 풀 때의 팁을 원하시는 분들도 보시는걸 추천드립니다. 풀이 딱히 풀이라 할 부분은 없을 것 같다. 문제에 제시된대로 구현하면 된다. 따라서 내 코드를 기준으로 어떤식으로 구현했는지만 얘기해보겠다. 우선 '방의 가장 북쪽, 가장 남쪽, 가장 서쪽, 가장 동쪽 줄 중 하나 이상에 위치한 모든 칸에는 벽이 .. 2024. 3. 19.
[자바] 백준 19953 - 영재의 산책 (java) 목차 문제 : boj19953 필요 알고리즘 정수론, 비둘기집의 원리 비둘기집의 원리로 풀 수 있는 문제이다. ※ 제 코드에서 왜 main 함수에 로직을 직접 작성하지 않았는지, 왜 Scanner를 쓰지 않고 BufferedReader를 사용했는지 등에 대해서는 '자바로 백준 풀 때의 팁 및 주의점' 글을 참고해주세요. 백준을 자바로 풀어보려고 시작하시는 분이나, 백준에서 자바로 풀 때의 팁을 원하시는 분들도 보시는걸 추천드립니다. 풀이 실제로 시뮬레이션을 돌려보게 된다면, O(t) 이므로 시간초과가 나게 된다. 따라서 시간을 줄일 아이디어를 찾아야 하는데, 내 경우에 비둘기집의 원리로 시간을 줄였다. n+1마리의 비둘기가 n개의 비둘기집에 들어간다면 자명하게도 최소 1개 이상의 비둘기집은 2마리 이상의.. 2024. 3. 18.