[BOJ] 백준 2096 내려가기 (JAVA)
Algorithm/- Baekjoon2024. 1. 29. 14:00[BOJ] 백준 2096 내려가기 (JAVA)

📑 문제🌱 아이디어메모리 제한 4MB이다, 즉 메모리 초과된다면 불필요한 메모리는 줄여야 한다. 처음 풀었을 때 N = 100,000까지 모든 입력을 배열에 받고 저장했다... 그러다 보니 메모리 초과가 나서 틀렸다이 문제는 사실 입력을 저장할 필요 없다 입력되면 -> dp로 처리한다 이를 N번 반복하면 된다 이 문제는 다이내믹 프로그래밍 알고리즘을 사용한다 즉 우리는 3가지 경우에 대한 점화식을 세우면 된다!   최댓값 구하는 경우j =1 , 점화식 = dp1[1] = max(dp1[1], dp1[2])+ n1j =3 , 점화식 = dp1[3] = max(dp1[3], dp1[2])+ n3j =2 , 점화식 = dp1[2] = max(dp[1] , max(dp[2], dp[3])+ n2내려갈 수 있..

[BOJ] 백준 15663 N과 M(9) (JAVA)
Algorithm/- Baekjoon2024. 1. 29. 00:48[BOJ] 백준 15663 N과 M(9) (JAVA)

📑 문제 🌱 아이디어입력된 숫자의 모든 경우의 조합 중 중복 제거 + 사전순 정렬! 이 문제를 풀 때 모든 경우의 수를 HashSet에 넣고 정렬을 한다면 중복제거 + 사전순 출력으로 될 줄 알았다. 일단 필자는 문자열로 처리했고 문자열 정렬을 했다 하지만 제대로 정렬되지 않았다.  숫자를 문자열로 입력받고 Arrays.sort를 하면 제대로 정렬되지 않는다.그 이유는 "숫자의 사전순 정렬"과 "문자열의 사전순 정렬"의 개념이 다르다, 필자는 제대로 몰랐다.;; 입력값 = 100, 20 오름차순 정렬 시 숫자의 사전순 정렬 은 20 임으로  출력은 20 100이다.문자열의 사전순 정렬 은 20의 "2" 보다 100의 "1"이 사전 순으로 먼저이다. 즉 숫자 자체는 100이 크지만문자열 정렬 시 우선..

[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] 백준 1913 달팽이 (JAVA)
Algorithm/- Baekjoon2024. 1. 15. 01:58[BOJ] 백준 1913 달팽이 (JAVA)

📑 문제 🌱 아이디어배열의 숫자가 시작되는 자리를 지정하고,오른쪽 상단 -> 오른쪽 하단, 오른쪽 하단 -> 왼쪽 하단, 왼쪽 하단 -> 왼쪽 상단, 왼쪽 상단 -> 오른쪽 상단으로 이동하는 규칙에 맞게 구현해 보자. 이 규칙을 찾는 건 크게 어렵지 않았다 다만 신경 써야 하는 부분은 한 칸씩 줄어들면서 탐색하는 범위를 지정하는부분이다. 여러 부분을 신경 써야 하니 코드에 주석을 달아놨으니 자세히 읽으면서 풀면 된다!  🌱 코드 및 풀이가장 처음 숫자는 배열의 0,0에서 시작한다. 줄어든 후는 1,1 그 후는 2,2 이렇게 배열중앙을 향해서 증가하는 모습을 볼 수 있다.maxN = 1이 될 때까지 반복하고 range를 통해 줄어든 범위까지 탐색할 수 있게 설정한다. 즉 우리는 가창 처음 숫자가 시작..

[BOJ] 백준 2503 숫자야구 (JAVA)
Algorithm/- Baekjoon2024. 1. 7. 04:34[BOJ] 백준 2503 숫자야구 (JAVA)

📑 문제🌱 아이디어1~9까지의 중복하지 않는 세 자리 숫자 조합, 즉 경우의 수가 적다 브루트포스로 풀어보자! 입력으로 예상 숫자를 주고 그 숫자가 얼마나 답에 근접했는지를 볼, 스트라이크로 알려준다 스트라이크 = 숫자자리, 숫자 모두 일치할 때볼 = 숫자가 포함만 되어있을 때 예를 들어 정답 "234" 에 대한 예상숫자 "241" 은  "1 스트라이크, 1 볼"이다. 그렇다면 답이 될 수 있는 모든 세 자릿수에 대한 힌트(스트라이크, 볼)가 입력받은 힌트와 일치한다면답이 될 수 있는 숫자이다! 이점을 이용해서 풀어보자!🌱 코드 및 풀이가장 처음에는 ArrayList에 중복이 없는 세 자릿수를 입력받고, 입력으로 예상 숫자와 힌트(볼, 스트라이크)가 들어올 때마다힌트에 부합하는 숫자라면 패스하고 부..

반응형
image