본문 바로가기

PS831

백준 1002 자바 - 터렛 (BOJ 1002 JAVA) 문제 : https://www.acmicpc.net/problem/1002 코드 : https://github.com/NaHwaSa/BOJ_BaekjunOnlineJudge/blob/master/01000/BOJ_1002.java 피타고라스 정리 정도만 알면 풀 수 있는 문제이다. 다만 상당히 귀찮은 문제이긴 한데, 모든 경우에 대해 분기를 쳐서 답을 구해야 한다. (그래서 문제를 푼 사람이 많은 문제임에도 정답 비율이 21%로 낮은 편이다.) GPS 삼각측량처럼 위치를 계산하는건데, 2개의 지점에 대해 측량하므로 모든 케이스에서 정확한 위치를 알 순 없다. 각 점에서 r을 반지름으로 하는 원을 그렸을 때 서로의 원이 만나는 지점이 결국 류재명이 있는 위치라 할 수 있다. 그러니 모든 케이스를 생각만 해.. 2023. 6. 22.
[자바] 백준 12893 - 적의 적 (java) 목차 문제 : boj12893 필요 알고리즘 이분 그래프, 그래프 탐색(BFS, DFS 등) 이분 그래프가 만들어지는지 파악할수만 있으면 풀 수 있다. 일반적으로 이분 그래프 판정을 위해 DFS나 BFS를 사용한다. ※ 제 코드에서 왜 main 함수에 로직을 직접 작성하지 않았는지, 왜 Scanner를 쓰지 않고 BufferedReader를 사용했는지 등에 대해서는 '자바로 백준 풀 때의 팁 및 주의점' 글을 참고해주세요. 백준을 자바로 풀어보려고 시작하시는 분이나, 백준에서 자바로 풀 때의 팁을 원하시는 분들도 보시는걸 추천드립니다. 풀이 생각과정은 다음과 같다. 1. 적의 적은 친구라고 계속해서 연결해나갈 때, 결국 어느 누구의 관점에서 보든 서로 연관이 있는(간선이 연결되어진) N명이 정확히 적과 .. 2023. 6. 18.
[자바] 백준 27988 - 리본 (Hard) (java) 목차 문제 : boj27988 필요 알고리즘 그리디 알고리즘, 정렬 문제를 좀 더 간단히 생각해보면 동일한 규칙을 적용시켜서 풀 수 있다. ※ 제 코드에서 왜 main 함수에 로직을 직접 작성하지 않았는지, 왜 Scanner를 쓰지 않고 BufferedReader를 사용했는지 등에 대해서는 '자바로 백준 풀 때의 팁 및 주의점' 글을 참고해주세요. 백준을 자바로 풀어보려고 시작하시는 분이나, 백준에서 자바로 풀 때의 팁을 원하시는 분들도 보시는걸 추천드립니다. 풀이 생각 과정은 다음과 같다. 1. 일단 입력으로 들어온 데이터부터 좀 더 이해하기 편하게 바꿔보자. X위치에 달린 길이 L의 구부릴 수 있는 리본이라 함은 결국 [X-L, X+L] 에서 다른 색상을 만나기만 하면 되는 리본이라 볼 수 있다. [.. 2023. 6. 16.
[자바] 프로그래머스 - 수열과 구간 쿼리 2 (Lv0, Java) 목차 문제 : Programmers - 수열과 구간 쿼리 2 문제 출처: 프로그래머스 코딩 테스트 연습, https://programmers.co.kr/learn/challenges 필요 알고리즘 구현 문제에서 제시된 대로 구현해주면 됩니다. 풀이 arr[s], arr[s+1], ... , arr[e-1], arr[e] 중 k보다 큰 값들 중 가장 작은 값을 찾는 문제이다. 문제만 잘 이해했다면 반복문을 잘 사용해서 풀 수 있다. k보다 큰 값 중 '가장 작은 값'이 문제일 수 있는데, 애초에 나올 수 있는 수치보다 큰 값을 무한대로 정하고 그 값을 갱신하면서 진행하면 편하다. 이 문제의 경우 0 ≤ arr의 원소 ≤ 1,000,000 이므로 1000001 이상으로 잡으면 된다. 아니면 그냥 Intege.. 2023. 6. 16.
[자바] 백준 1083 - 소트 (java) 목차 문제 : boj1083 필요 알고리즘 그리디 알고리즘 최선의 방법을 정해 매번 시도하면 풀 수 있는 문제이다. ※ 제 코드에서 왜 main 함수에 로직을 직접 작성하지 않았는지, 왜 Scanner를 쓰지 않고 BufferedReader를 사용했는지 등에 대해서는 '자바로 백준 풀 때의 팁 및 주의점' 글을 참고해주세요. 백준을 자바로 풀어보려고 시작하시는 분이나, 백준에서 자바로 풀 때의 팁을 원하시는 분들도 보시는걸 추천드립니다. 풀이 생각 과정은 다음과 같다. 1. N이 50인데 S가 100만?! -> 버블 정렬 생각해보면 결국 N(1+N)/2번 수행되면 어차피 내림차순으로 가능하므로, S가 큰건 의미가 없다. S가 1275 초과일 경우 어차피 의미 없는 값이므로, 100만이라도 문제없음! if.. 2023. 6. 14.
[자바] 백준 21278 - 호석이 두 마리 치킨 (java) 목차 문제 : boj21278 필요 알고리즘 플로이드 와샬, BFS, 다익스트라 등 최단 거리 알고리즘 아무거나 최단 거리를 구할 수 있는 알고리즘으로 풀 수 있는 문제이다. ※ 제 코드에서 왜 main 함수에 로직을 직접 작성하지 않았는지, 왜 Scanner를 쓰지 않고 BufferedReader를 사용했는지 등에 대해서는 '자바로 백준 풀 때의 팁 및 주의점' 글을 참고해주세요. 백준을 자바로 풀어보려고 시작하시는 분이나, 백준에서 자바로 풀 때의 팁을 원하시는 분들도 보시는걸 추천드립니다. 풀이 생각 과정은 이하와 같다. 1. 모든 건물에 대해 모든 쌍에 대한 최단 거리를 알 수 있다고 해보자. 2. 그렇다면 N개 중 2개의 건물을 고르기로 확정하고, '1'에서 구한 거리 정보로 '최단 시간의 총합.. 2023. 6. 13.
[자바] 백준 27468 - 2배 또는 0.5배 (java) 목차 문제 : boj27468 필요 알고리즘 애드 혹 이 문제에 맞는 규칙을 찾아 푸는 문제이다. ※ 제 코드에서 왜 main 함수에 로직을 직접 작성하지 않았는지, 왜 Scanner를 쓰지 않고 BufferedReader를 사용했는지 등에 대해서는 '자바로 백준 풀 때의 팁 및 주의점' 글을 참고해주세요. 백준을 자바로 풀어보려고 시작하시는 분이나, 백준에서 자바로 풀 때의 팁을 원하시는 분들도 보시는걸 추천드립니다. 풀이 우선 힌트는 서브태스크 2번에서 얻었다. N은 4의 배수에 배점이 있는걸보고 4의 배수면 쉽겠구나 생각했다. 손으로 그려보면서 찾아보니 1,3,2,4 / 5,7,6,8 / ... 이런식으로 4의 배수는 무한정 가능함을 확인했다. 그리고 4로 나눈 나머지가 1인 경우도 문제없고(1,3.. 2023. 5. 15.
[ABC301] D - Bitmask (AtCoder Beginner Contest 301 in Java) 목차 문제 : ABC301 - D 필요 알고리즘 문자열, 수학 이진수에 대한 수학적인 사고가 좀 필요한 문제이다. ※ 제 코드에서 왜 main 함수에 로직을 직접 작성하지 않았는지, 왜 Scanner를 쓰지 않고 BufferedReader를 사용했는지 등에 대해서는 '자바로 백준 풀 때의 팁 및 주의점' 글을 참고해주세요. 백준을 자바로 풀어보려고 시작하시는 분이나, 백준에서 자바로 풀 때의 팁을 원하시는 분들도 보시는걸 추천드립니다. 풀이 1. 우선 '?'를 전부 '0'으로 바꿔본다. (만들 수 있는 최소값) 그게 n과 동일하다면 n이 답이고, n보다 크다면 애초에 불가능한 경우이므로 -1을 출력하고 끝낸다. 2. 다음으로 '?'를 전부 '1'로 바꿔본다. (만들 수 있는 최대값) 그게 n 이하라면 그.. 2023. 5. 13.
[ABC301] C - AtCoder Cards (AtCoder Beginner Contest 301 in Java) 목차 문제 : ABC301 - C 필요 알고리즘 그리디 그리디라고 하기 좀 애매하긴한데, 아무튼 바꿀 수 있으면 대충 바꾸는 로직으로 풀 수 있으므로 일단 그리디라 적었음. ※ 제 코드에서 왜 main 함수에 로직을 직접 작성하지 않았는지, 왜 Scanner를 쓰지 않고 BufferedReader를 사용했는지 등에 대해서는 '자바로 백준 풀 때의 팁 및 주의점' 글을 참고해주세요. 백준을 자바로 풀어보려고 시작하시는 분이나, 백준에서 자바로 풀 때의 팁을 원하시는 분들도 보시는걸 추천드립니다. 풀이 cnt 배열에 'a'부터 'z' 까지 S에 나온 문자만큼 +1, T에 나온 문자만큼 -1을 해주며 세줬다. 예를들어 S가 "ABC", T가 "BCD" 라면 cnt[0] = 1, cnt[1] = 0, cnt[2.. 2023. 5. 13.
[ABC301] B - Fill the Gaps (AtCoder Beginner Contest 301 in Java) 목차 문제 : ABC301 - B 필요 알고리즘 구현 문제에서 제시된 방법대로 구현하면 된다. ※ 제 코드에서 왜 main 함수에 로직을 직접 작성하지 않았는지, 왜 Scanner를 쓰지 않고 BufferedReader를 사용했는지 등에 대해서는 '자바로 백준 풀 때의 팁 및 주의점' 글을 참고해주세요. 백준을 자바로 풀어보려고 시작하시는 분이나, 백준에서 자바로 풀 때의 팁을 원하시는 분들도 보시는걸 추천드립니다. 풀이 직전 숫자와의 차이가 1 이상이라면 사이값을 채워넣어주면 된다. List res = new ArrayList(); res.add(arr[0]); for (int i = 1; i < n; i++) { if (Math.abs(arr[i-1] - arr[i]) arr[i]; j--) res... 2023. 5. 13.