풀이 77

[HackerRank] 2d-array java 풀이

문제 설명1. 배열에 대해 1 1 10 1 01 1 1요만큼 해당하는 애들만 더하는것2. 크기는 정해져 있다. 풀이 과정 1. 어차피 크기는 정해져 있으니 내부에서 돌면서 저만큼 구해서 더해주면 된다. 2. 0 ~ n 의 크기라고 하면 1 ~ n-1 까지 구하면 된다는 느낌 3. 각 위치에 대해서 미리 갖고 있고 이걸로 사용할 것을 정하면 된다.    https://www.hackerrank.com/challenges/2d-array/problem?isFullScreen=true&h_l=interview&playlist_slugs%5B%5D=interview-preparation-kit&playlist_slugs%5B%5D=arrays

알고리즘 공부 2024.10.09

[HackerRank] repeated-string java 풀이

문제 설명1. s 문자열이 n개 숫자가 될 때까지 반복된다.2. 그 문자에서 'a' 의 갯수를 구하면 된다.3. n의 크기는 크다. 풀이 과정 1. n이 길어서 브루트포스는 안된다. 2. 처음 문자열에서 a의 갯수를 구함 3. n만큼의 길이 내에서 저 문자열이 몇번 반복되는지 구해서 그만큼 곱한다. 4. n에서 반복된 후에 나머지 짜잘한 애들 중 a가 몇개 있는지 구해서 더하면 된다.     https://www.hackerrank.com/challenges/repeated-string/problem?isFullScreen=true&h_l=interview&playlist_slugs%5B%5D=interview-preparation-kit&playlist_slugs%5B%5D=warmup

알고리즘 공부 2024.10.08

[HackerRank] Jumping on the Clouds java 풀이

문제 설명1. 간단한 DP 문제이다.2. '0' 만 밟을 수 있다고 생각하면 편하다.3. 현재 위치에서 1칸 2칸을 점프할 수 있다.4. 그래서 마지막까지 몇번의 점프가 최소인지를 구하면 된다. 풀이 과정 1. 간단하다. 0부터 시작해서 마지막까지 가고, 지금 다음 구름에는 현재 위치에서 점프하는 때(현위치 값 + 1)가 최소인지 파악해서 넣어주면 된다. 2. 1은 그냥 넘기면 된다. 3. 끗  https://www.hackerrank.com/challenges/jumping-on-the-clouds/problem?isFullScreen=true&h_l=interview&playlist_slugs%5B%5D=interview-preparation-kit&playlist_slugs%5B%5D=warmup

알고리즘 공부 2024.10.07

[백준 2133번] 타일 채우기 - java

문제 설명 1. 3XN 크기의 벽을 2X1, 1X2 타일로 채우는 경우의 수를 구해보자! 2. 문제 길이가 겁나 짧다... 그냥 이게 다임 풀이 과정 1. DP문제이다. 참 이 문제는...고민할 내용은 정말정말정말정말 많지만 코드로 구현하면 뭐가 이렇게 짧지? 하는 기분을 준다. 2. DP를 푸는 방법은 개인적으로 처음부터 무식하게 들이박는 수밖에 없다고 생각이 든다. 3X1의 타일의 경우는 못구한다. 3X2의 타일의 경우는 얘네 셋이 나올 것이다. 3X3의 타일의 경우는 못구한다. 3X4의 타일의 경우는 저 위에있는 3X2 타일에다가 추가로 3X2타일을 붙이면 구할 수 있을 것이다. 그런데... 그 방식 말고도 다른 방식으로 타일을 채울 수도 있을 것이다 예를 들어 이런 애들이 추가로 나타나게 될 것이..

알고리즘 공부 2022.05.15

[백준 14940번] 쉬운 최단거리 - java

문제 설명 1. 지도의 N과 M이 주어진다. 2. 가로세로(상하좌우)로 이동할 수 있고, 0은 못가는땅 1은 갈수있는땅 2는 목표지점이다. 3. 2에서 시작해서 도달 가능거리를 구한다. 4. 갈수있으면 도달까지 거리, 원래 갈수없으면 0, 원래 갈 수 있는데 못가면 -1을 출력한다. 풀이 과정 1. BFS로 풀어나간다. 2. 그냥 거리를 구하는것은 사실 간단하다. 기본적인 BFS를 사용해주면 된다. 3. 문제 설명의 4번과정에 관해서 조금 생각을 해주어야 한다. 그리고 내 풀이보다 분명히 더 효율적인 방법이 있겠지만, 이렇게 해도 시간복잡도에 크게 문제될 것은 없어서 진행해 주었다.(코테의 시간복잡도에서는 안걸릴 방법이기 때문) 4. 이를 생각하고 풀이과정을 도출해보자 A. 목표지점 2는 딱 한번 주어진..

알고리즘 공부 2022.04.19

[백준 12934번] 턴 게임 - java

문제 설명 1. 숫자 x와 y가 주어진다. 2. 턴은 1부터 시작하고, n번째 턴의 승리자는 n점을 얻는다. 3. x와 y에 대해 각각의 점수를 얻는것이 불가능하면 -1출력 4. 가능하면, x점수를 얻는 최소한의 승리횟수를 구하면 된다. 풀이 과정 1. 1, 2, 3, 4, 5, 6, ..... 의 점수를 얻는 방법은 (N*(N+1))/2 이다. 이것만 알면 간단하다. 2. 사실상 수학적 구현 문제이다. 3. 참고로 이거 숫자가 long형식이니까 주의하자. 4. 이를 생각하고 풀이과정을 도출해보자 A. x와 y의 합계점수에 대해, 여기 정확히 도달할 수 있어야 한다. 해당 숫자보다 작으면 그보다 큰 숫자로 (N*(N+1))/2을 시도하고, 만약 이게 x+y보다 크면 불가능할것이다. B. (N*(N+1))..

알고리즘 공부 2022.04.19

[백준 2258번] 정육점 - java

문제 설명 1. 고기의 수 N과 필요한 고기의 무게 M이 주어진다. 2. 고기의 무게과 가격이 주어진다. 3. 구매한 고기보다 싼 고기는 공짜로 준다. 4. 가장 적은 돈을 들여서 고기를 사는 방법을 구하면 된다. 풀이 과정 1. 이거 실버1인거 보고 방심하고 풀었는데...... 진짜 엄청 헤맸다. 쉽게 보고 풀면 안되는 함정문제이다. 2. 구매한 고기보다 싸면 공짜로 주니까 그냥 가격순으로 오름차순 하면서 더해주면 되겠지? 했는데 싼 고기라는게 굉장히 중요하다. 3. 즉, 구매한 고기랑 같은 가격의 고기는 공짜로 안준다!!! 4. 이를 생각하고 풀이과정을 도출해보자 A. 우선순위 큐를 구현하여 가격이 같으면 무게는 내림차순으로 가게끔 으로 만들어 준다. B. 이 우선순위 큐가 끝날 때 까지 무게를 구해..

알고리즘 공부 2022.04.10

[백준 11509번] 풍선 맞추기 - java

문제 설명 1. 풍선의 수 N이 주어진다. 2. 왼쪽에서 오른쪽으로 화살을 쏘고, 풍선을 맞추게 되면 높이가 1줄어서 화살이 날아가게 된다. 3. 아래높이의 풍선이 있으면 또 이걸 터트리고 높이가 1 줄어든다. 4. 최소의 화살개수를 구하면 된다. 풀이 과정 1. 그리디...겠지? 나는 걍 해쉬맵으로 구현했다. 2. 풀이 과정은 이렇게 했다. A. 풍선을 처음부터 순서대로 확인하면서, HashMap에 해당 높이에 있는 화살이 있는지 먼저 파악해준다. B. 해당 높이에 화살이 없으면 쏴야하는 화살의 개수는 하나 늘고, 만약에 있으면 해당 높이의 화살을 하나 없애준다. C. 어쨌든 이 화살은 풍선을 맞추었으니, 아래 높이의 화살로 변경될것이다. D. 참고로, HashMap은 처음 풍선들의 위치를 받을때마다 ..

알고리즘 공부 2022.04.09

[백준 13164번] 행복 유치원- java

문제 설명 1. 학생의 수 N, 조의 수 K가 주어진다. 2. N명의 학생은 오름차순으로 주어지고, K개의 조로 나누어야 한다. 3. 티셔츠를 맞추는 비용은 각 조에서 가장 키가 큰 원생과 가장 작은 원생의 차이만큼 주어진다. 4. 최소의 비용을 구하면 되는 문제이다. 풀이 과정 1. 그리디 문제이고, 이 문제랑 거의 똑같은 로직을 사용하면 쉽게 구할 수 있는 문제이다. 2. 풀이 방법은 거의 똑같은데, 설명하면 이와 같다. A. 학생 수가 순서대로 정리되어 있으므로, N명의 학생에 대해 키 차이를 구해준다. B. N-1개의 키차이의 배열이 주어질 텐데 이를 우선순위 큐에 하나씩 넣어준다. 우선순위 큐는 내림차순으로 정리된다. C. K개의 조로 이루어져 있고, 최소의 가격을 구해야 하므로 조를 구할 때 ..

알고리즘 공부 2022.04.09

[백준 5557번] 1학년 - java

문제 설명 1. N개의 숫자가 주어진다. 2. 맨 뒤의 숫자는 결과값이며, +와 -를 사용해가면서 숫자를 만든다. 3. 만들어지는 숫자는 0~20사이의 정수이다. 4. 마지막의 결과값을 만들 수 있는 경우의 수를 구하면 된다. 풀이 과정 1. 처음에는 완전탐색을 사용해야 하는 문제라고 생각했는데, 이거 완탐으로 절대 못푼다. 시간초과가 엄청 날것이다. 2. DP를 사용해서 진행한다. 순서는 아래와 같다. A DP는 이중 배열을 사용하여 [해당process숫자][만들어지는수사] = 가능한 경우의 수 를 저장하도록 한다. B 맨 처음 숫자는 당연히 [0][첫번째입력숫자] = 1일 것이다. C 나는 DP와 완전탐색을 약간 합친 방법을 통해 구현하였는데, 다음번의 경우를 구하려면 이전의 DP에서 만들어진 경우의..

알고리즘 공부 2022.04.07