[Java]BOJ 1351 : 무한 수열
·
Algorithm
https://www.acmicpc.net/problem/1351🚩문제🔓문제해결(Top-Down)Top-Down방식을 사용하여 필요한 값들만 계산하고 저장HashMap을 사용하여 계산된 값을 저장하고 해당 key가 존재하면 값을 꺼내오는 방식을 사용import java.io.*;import java.util.*;public class Main{ static HashMapmap = new HashMap(); static long n,p,q; public static void main(String[] args) throws IOException { BufferedReader br = new BufferedReader(new InputStreamReader(System.in))..
[Java]BOJ 2225 : 합분해
·
Algorithm
https://www.acmicpc.net/problem/2225🚩문제🔓문제해결N까지의 정수를 0개 더해서 그 합이 0이 되는 경우의 수 0을 k번 더하는 방법 1개밖에 없다.k=1일 경우 N까지의 정수를 1개 더해서 그 합이 N이 되는 경우의 수=> 자기 자신만 가짐. 1개=> dp[k+1][n+1] 의 크기일 경우 dp[1]을 1로 채워준다.N=1일때k=1 : 1               :: 1가지k=2 : 1+0 , 0+1  :: 2가지k=3 : 1+0+0 , 0+1+0, 0+0+1 :: 3가지  N=2 일때k=1 : 2               :: 1가지k=2 : 2+0 , 0+2,1+1  :: 3가지k=3 : 1+1+0 , 1+0+1, 0+1+1 ,2+0+0,0+2+0,0+0+2 :: 6..
[Java]BOJ 1654 : 랜선 자르기
·
Algorithm
https://www.acmicpc.net/problem/1654🚩문제🔓문제해결 (이분탐색)1. 랜선 길이를 int로 하여 계산하면 중간에 해당 범위를 넘을 수 있기 때문에 long으로 선언한다.2. 시작시에 (0+최댓값)/2로 해당 배열의 중간값을 구하고 그 값에 따라 때문에 중간값의 위치를 변경해야하기 때문에 입력받은 랜선길이를 정렬을 해준다.3. 가지고 있는 랜선들을 2번에서 구한 중간값으로 각각 나누어서 몫을 결과값에 더해준다.4.결과값이 N(필요한 랜선의 수) 보다 작으면 나눠야하는 값이 작아야하는것이므로 최댓값을 중간값-1의 값으로 변경해준다.5. 그렇게 필요한 랜선의 수가 나올때까지 무한루프를 실행하고 최소값이 최댓값보다 커지면 루프문을 탈출한 후 최댓값을 출력해준다. import jav..
[Java]BOJ 2776 : 암기왕
·
Algorithm
https://www.acmicpc.net/problem/2776🚩문제🔒문제해결(시간초과)비교 해야할 정수의 개수 N이 1 ≤ N ≤ 1,000,000범위이므로, 매번 System.out.println()으로 출력하면 시간 초과가 발생할 수 있습니다. StringBuilder에 모아두었다가 마지막에 한번만 System.out.println()로 출력하는것을 선택 1. 테스트 케이스 개수만큼 for문을 진행하고 그 안에서, N과 M값을 입력2. 숫자 리스트에  입력받은 N과 M 의 정수를 저장하고 for문을 돌면서 일치하는 것이 존재하면 1,없으면 0을 저장 하여 출력두 리스트간 모든 요소 비교로 O(N×M) 🔓문제해결(HashSet)HashSet : O(1)의 시간 복잡도검색,삽입,삭제 작업 수행 ..
[Java]BOJ 1388 : 바닥장식
·
Algorithm
https://www.acmicpc.net/problem/1388🚩문제🔓문제해결 - BFSFIFO - 먼저처리된 노드부터 처리, Queue사용탐색을 가로로 진행, 먼저 탐색된 노드와 인접한 노드들을 모두 탐색 후 다음 탐색시작 1.bfs함수를 만들어서 사용할 예정이므로전역변수 : 가로, 세로이동방향 ,방문여부체크 배열 , 위치값(x,y)를 먼저 선언하고 시작한다. 2. main에서는2-1. 입력값을 모두 받아서 저장하고 주어진 배열의 크기까지 지정해준다.2-2. for문을 돌면서 방문하지않은 곳이라면 해당 위치값(x,y)과 문자가 저장된 배열을 bfs함수의 파라미터로 넘겨준다.2-3. 그리고 나무판자의 개수를 +1해준다(나무판자가 가로일수도 세로일수도 있지만 따로 구분하지 않고 출력하기 때문에 해당 ..
[Java]BOJ 1026 : 보물
·
Algorithm
https://www.acmicpc.net/problem/1026🚩문제🔓문제해결1.배열A와 배열B의 똑같은 위치에 있는 값끼리 각각 곱하고 모두 더해준다.=>이 값이 최소값이 되기 위해서는 최댓값*최솟값을 계속 해줘야한다.2.문제에서 B는 재배열하면 안된다는 조건이 있다.3.우선 A배열을 오름차순 해준다.4.내림차순된 B배열의 값을 가져오기위해 인덱스를 사용한다.5. 새로운 배열 C에 인덱스값을 넣어준다. 6.배열C의 정렬을 Comparator의 compare를 오버라이드하여 배열B를 기준으로 맞춰준다.(배열B에 있는값을 내림차순한다 -> 그 값의 위치값을 배열C에 넣는다. ) 7.for문을 돌면서 배열a와 배열b를 각각 곱하면서 결과값에 더해준다.(배열B는 배열C에서 값을 가져와서 사용한다.)imp..
[Java]BOJ 16112 : 5차 전직
·
Algorithm
https://www.acmicpc.net/problem/16112🚩문제🔓문제해결1. 활성화된 스톤은 경험치가 0이 되고 활성화되어있는 스톤에 그 값이 더해진다.2.최댓값을 구하려면 작은 경험치부터 활성화되어야한다.=>활성화될때 경험치가 0이되니 모두 활성화가 되었을때 남아있는 스톤의 경험치가 클수록 좋기 때문이다.=>활성화갯수가 최대가 되면 그 이후로 남은 스톤은 활성화갯수만큼 경험치가 더해진다.참고 블로그 : https://blog.naver.com/hoo3164/222718534082예를 들어 스톤 6개 , 최대 활성화 스톤 개수(3개)1번째 활성화 ->영향받는 스톤x2번째 활성화 ->영향받는 스톤1개3번째 활성화 ->영향받는 스톤2개4번째 활성화 -> 영향받는 스톤 3개5번째 활성화 -> (2..
BOJ 1863 : 스카이라인 쉬운거
·
Algorithm
https://www.acmicpc.net/problem/1863🚩문제 🔒문제해결(오답)전혀 쉽지않았는데.....왜 쉬운거일까 .....................쉽지않은 문제였다고 한다...풀고나니 막대기 문제와 비슷한 결인데 좀 더 좀더 어려운 느낌?? 1.왼쪽부터 고도가 바뀌는 지점의 좌표가 입력되므로 x값이 중복되는 경우가 없음2.리스트에 y값만 저장하여 카운트 ++3.첫번째 입력받은 y의 최솟값과 최댓값으로 지정4.for문을 돌며 최솟값이 같거나 최댓값이 바뀌게 될 경우 +1씩(최솟값이 같으면 :같은높이건물, 최댓값이 바뀌면 : 다른높이 건물)5.y의 값이 0을 만나면 최소,최댓값을 초기화해줌예제를 돌렸을때 정답이 나와서 접근법이 맞는줄 알았다고 한다 ㅇㅅㅇ 하지만 제출하고서 7%?에서 바..