알고리즘 338

[백준, 자바, 19532번] 수학은 비대면강의입니다

풀이해당 문제는 직접 풀이하면 간단하지만,뭔가 알고리즘으로 해결하려고 생각하니 까다로운 점이 있어서시간이 걸렸다.처음 접근할 때는, 주어지는 입력값에 0이 있다는 것을 어디까지 생각해야 하는지에 대한 혼동으로 우선은모든 값에 0이 아닌 정수가 있다는 것으로 픽스를 하여a와 d를 기준으로 잡고 같은 값으로 만들기 위해 우선 GCD로 최대공약수를 찾아 그에 맞게 각 방정식의 값을 변경 후 x,y 값을 찾기이후 모든 경우를 생각해서 각 방정식에 0의 정수가 하나씩 모두 있는 경우와한 방정식에 있는 경우에 대한 조건 분기 후 처리하여 해당 문제를 해결. import java.io.*;import java.util.*;public class _19532 { public static void main(Stri..

알고리즘 2024.11.11

[백준, 자바, 1977번] 완전제곱수

풀이해당 문제는 간단한 문제로문제만 잘 읽고, 이해하면 되는 문제라고 판단하여 빠르게 해결M과 N 사이의 값 중 완전제곱인 수의 합과, 최솟값을 구하는 문제로M을 루트 씌운 값을 시작으로 완전제곱일 경우에 대한 조건 분기를 거쳐 해결. import java.util.Scanner;public class _1977 { public static void main(String[] args) { Scanner sc = new Scanner(System.in); int M = sc.nextInt(); int N = sc.nextInt(); long result = 0; int now = (int)Math.round(Math.sqrt(M)); ..

알고리즘 2024.11.10

[백준, 자바, 1057번] 토너먼트

풀이해당 문제를 풀면서 역시 대충 예상하고 풀지말자라고 다시 느끼게 됨.처음에 문제 아래에 서로 붙지 않는 경우엔 -1을 하라고 했지만토너먼트인데 서로 붙지 않는 경우가 있을까 해서예외처리 하지 않고 했는데 계속 실패그리고 무조건 앞의 친구가 작을 것으로 대충 생각하고 해서 실패이러한 작은 것들이 하나 둘씩 생각 안하고 풀어 제끼니 계속 틀리지 싶어서 반성...무튼 해당 문제는 위의 것들을 고려하고, N을 계속 2로 나누며 범위를 탐색했고,만약 N이 홀수의 경우엔 가장 마지막 값을 따로 추가 해주면서 아래와 같이 해결. import java.io.*;import java.util.*;public class _1057 { public static void main(String[] args) throw..

알고리즘 2024.11.09

[백준, 자바, 14940번] 쉬운 최단거리

풀이처음엔 그냥 단순히 bfs로 풀었는데제출후 틀렸다고 해서, 출력에 보니갈 수 없는 구간은 -1로 하라고 해서 다시 아래와 같이초기 result 값을 모두 -1로 정의 후값을 추가할 때 조건 분기처리를 더하여 해결. import java.io.*;import java.util.*;public class _14940 { public static void main(String[] args) throws IOException { BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); StringTokenizer st = new StringTokenizer(br.readLine()); Deq..

알고리즘 2024.11.01

[백준, 자바, 12852번] 1로 만들기 2

풀이코드를 좀 간결하게 하자면 할 수 있지만, 연습이니까 우선 이렇게 하고가장 마지막에 99퍼에서 시간초과가 발생하길래,어떤게 문제일까 생각해보며, N의 범위를 살펴보니1보다 크거나 같다고 하니, 1이 들어오면 dq가 계속해서 추가될 것으로 확인 후수정하여 해결. import java.util.*;public class _12852 { public static void main(String[] args) { Scanner sc = new Scanner(System.in); StringBuilder sb = new StringBuilder(""); int N = sc.nextInt(); Deque> dq = new ArrayDeque(Arrays.as..

알고리즘 2024.11.01

[백준, 자바, 18352번] 특정 거리의 도시 찾기

풀이흠 원래 코드를 좀 간결하게 하고자 IntStream을 종종 사용했는데, 주의해야할 듯하다..이것 땜에 메모리 초과로 한참을 고생했네,,,그리고 기존 비용 관련 문제의 경우 현재 비용을 함께 전달하여 해결하곤 했는데,dp를 사용해서 현재 좌표에 해당하는 인덱스의 값을 활용하는 방법도 좋다고 생각.이건 다른 사람들 코드를 보고 확인그런데 이렇게 하니까 훨씬 코드가 더 깔끔해져서 좋은거 같음.1번 풀이 참조 // 1번 풀이import java.io.*;import java.util.*;public class _18352 { public static void main(String[] args) throws IOException { BufferedReader br = new Buffered..

알고리즘 2024.11.01

[백준, 자바, 7569번] 토마토

풀이해당 문제는 3차원 배열 문제로, 파이썬 사용할 때 관련 문제를 풀어봤고자바로는 처음이라 도키도키 했음그래서 첫 풀이 과정은그냥 일반 bfs처럼 해결하면서,주위에 안 익은 토마토가 있는 좌표만 dq에 추가하고,이후에 dq를 탐색하면서 해당 좌표 주위에 있는안 익은 토마토를 익히게 하며 카운팅 후 결과를 도출하고자 했음그러나 시간초과.물론 처음 코드를 작성할 때도, 유사한 로직이 한 번 더 있고다 차원의 for문과 while문이 있으니 쉽지 않을 것 같다고 생각을 했지만,그래도 안 익은 토마토 주위에 있는 토마토만을 dq에 추가하니까 시간적으로 효율이 괜찮지 않을까? 하고 제출을 했지만 시간초과가 나서 고민을 하게 됨.이후 두 번째 풀이 과정으로중복되는 코드 로직을 없애고,그냥 단순히 첫 데이터를 mt..

알고리즘 2024.10.31

[백준, 자바, 16953번] A -> B

풀이해당 문제는 따로 알고리즘이라고 하기엔 뭐가 없었음.그냥 단순히 bfs로 2를 곱한 수와, 해당수에 10을 곱하고 1을 더한 값을 누적하기그리고 같은 값을 계속 반복하면 시간만 낭비하니 Set에 추가하며 확인 후 추가하며 해결 import java.io.*;import java.util.*;public class _16953 { public static void main(String[] args) throws IOException { BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); long[] AB = Arrays.stream(br.readLine().split(" ")).mapToLon..

알고리즘 2024.10.31

[백준, 자바, 1927번] 최소 힙

풀이해당 문제는 단순히 배열을 사용하여 풀고자 할 경우엔문제가 있다고 판단하여 문제의 타이틀에 나온 것처럼최소 힙 문제 유형이기에 우선순위 큐를 사용하여 문제를 해결.그리고 출력이 많이 되기에 그냥 write하여 한 번에 출력할 수 있도록 하여 해결. import java.io.*;import java.util.*;public class _1927 { public static void main(String[] args) throws IOException { BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); BufferedWriter bw = new BufferedWriter(new Output..

알고리즘 2024.10.30

[백준, 자바, 1676번] 팩토리얼 0의 개수

풀이해당 문제를 처음에는 그냥 단순히인풋으로 들어오는 값을 가지고 펙토리얼 한 값을 구한 다음 10을 나누며 결과를 출력하고자 했음.다만 인풋값이 500까지 들어오는 것을 보고 그대로 출력을 해보니값이 계속 0으로 출력이 되어 계속 확인을 해보니특정 값 이상 넘어가니 원하는 값이 나오지 않는 것을 확인.이후 규칙을 찾아보려고 해도 찾기 어려워서, 수학적 힌트를 얻고자 찾아보니신기하게 해당 펙토리얼의 값에서, 0인 뒷자리 개수를 알고자 한다면2*5의 지수를 확인하면 되는 것 확인예를 들어 10의 경우 2^1*5^1 이기에 2*5로 볼 땐 1개라 결과를 1로 출력하면 되고100의 경우 2^97*5^24 이기에 2*5의 경우엔 24개이기에 24를 출력하면 됨.이후 IDEA에서 입력 값을 500을 넣어도 괜찮아..

알고리즘 2024.10.30