본문 바로가기

Java77

[백준] JAVA 자바 : 30 (10610번) 입력받은 수가 30의 배수라면, 그 수의 자릿수 조합으로 만들 수 있는 최댓값을 출력하는 문제이다. 나는 처음에 N이 최대 10^5개의 숫자로 구성된다는 말이, N의 최댓값이 100,000이라는 줄 알아서 그냥 int로 결과값을 만들었는데 계속 틀려서... 질문 게시판을 보니까 이게 자릿수 최댓값이 10만 개라는 뜻이었다... 그래서 결과값을 StringBuilder으로 처리해 줬다... 근데 시간이 꽤 오래 걸리는 이슈...ㅋㅋ 난 어떻게 풀었냐면, N의 모든 자릿수를 돌면서 sum에 더해준다. 그 과정에서 0의 개수도 체크해 준다. 그리고 조회한 자릿수는 우선순위 큐에 내림차순으로 넣어 준다. 다 돌고 난 후 sum이 3의 배수이면서 0이 하나 이상 있다면, 그건 30의 배수이므로 우선순위 큐에서 하.. 2024. 3. 14.
[백준] JAVA 자바 : A → B (16953번) 두 수 A와 B를 입력받으면, 'A에 2를 곱하거나' '1을 붙이는' 방법으로만 B를 만드는 문제이다. 나는 어떻게 해결했냐면... 쉽게 설명하자면 1. B의 1의 자리가 1이라면 B에서 10을 나누고, 2. 그게 아니라면 B에서 2를 나눠서 B가 A보다 작아질 때까지 반복했다. 예를 들면 162의 경우에는, 1의 자리가 1이 아니므로 2를 나눠 81으로 만든 후 sum(결과값)에 1을 더한다. 그 다음에는 B가 81이 되므로, 1의 자리가 1이므로 10을 나눈 후 sum에 1을 더한다. 다음은 B가 8이므로, 1의 자리가 1이 아니므로 2를 나눠 4로 만든 후 sum에 1을 더한다. 다음은 B가 4이므로, 1의 자리가 1이 아니므로 2를 나눠 2로 만든 후 sum에 1을 더한다. → 이후에는 B > A.. 2024. 3. 14.
[백준] JAVA 자바 : 카드 정렬하기 (1715번) 그리디 알고리즘 파트에서 처음 맞이하는 골드 단계 문제이다. 문제 자체는 어렵진 않은데... 나는 몇 시간을 헤맸다...ㅋㅋㅋ 입력된 정수 배열을 처음부터 끝까지 돌면서 가장 작은 값 두 개를 빼서 sum에 더한 후, 크기에 맞게 배열에 다시 넣어주면 된다. 여기서 난 처음에 배열에서 값을 뺀 후에 일일이 Arrays.sort()로 정렬을 해줬었는데, 그래서 계속 메모리초과 + 시간초과가 떴다... 결국 못 참고 아래의 '알고리즘 분류'를 봤는데 우선순위 큐가 있네?? 그래서 우선순위 큐를 사용해주면 쉽게 정렬을 유지한 채로 요소의 삽입과 삭제가 가능해진다! 우선 순위 큐는 이번에 처음 써보는데... 새로 하나 배워간다...! import java.io.BufferedReader; import java... 2024. 3. 8.
[백준] JAVA 자바 : 주유소 (13305번) 글이 되게 길고 무슨 이미지까지 포함돼 있어서 복잡해 보이는 문제이긴 한데 사실 굉장히 간단하고 쉬운 문제였다!! 거리와 리터당 가격을 입력받은 후, 가격 배열을 처음부터 끝까지 돌면서 cost[i]가 최소값일 경우에는 sum(총 비용)에 cost[i]를 더해주면 되고, 최소값이 아닐 경우에는 이전의 최소값 min을 더해주면 된다. 사실 이 문제가 서브태스크가 존재하는 문제였는데, 처음에는 100점이 아니라 58점이 뜨던 것... 아니 뭐가 문제인지 봤는데 알고보니 총 거리가 10억이라서, 가격이 3만 넘어가면 바로 int 타입은 오버플로우가 되던 것이었다! 그래서 int를 모두 long으로 바꿔주고 100점을 받을 수 있었다... import java.io.BufferedReader; import ja.. 2024. 2. 23.
[백준] JAVA 자바 : 수들의 합 (1789번) 네, 보시면 아시겠지만 저걸 구하는 문제입니다. 자연수 S에서 1부터 하나씩 증가시켜 가면서 가능할 때까지(0보다 작아질 때까지) 빼주면 됩니다. 왜 이렇게 설명이 성의가 없냐면... 누군가에게 코드를 설명하기가 쉽지가 않다는 걸 깨달아 버렸기 때문이네여... import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.util.StringTokenizer; import java.util.Arrays; import java.util.Comparator; import java.lang.StringBuilder; public class SumOfNumbers { public stat.. 2024. 2. 23.
[백준] JAVA 자바 : 로프 (2217번) 문제는 설명하기 귀찮으니 대충 읽어 오셨을 거라고 생각하고 넘어가겠읍니다. 여튼 로프를 몇 개 사용할 건지, 그렇게 사용한 로프로 최대 얼마의 중량까지 들 수 있는지를 찾으면 된다. 이건 로프 별로 들 수 있는 최대 중량들을 하나의 배열에 담은 후, 몇 개의 로프를 선택할 건지를 1개부터 N개까지 모두 돌면서 최대값을 확인하면 된다. 이게 진짜 말로 하기는 되게 어려우니... 코드로 보시져 그리디 알고리즘은 뭐니뭐니해도 정렬이 핵심인 듯...?! (아닐 수도 ㅋㅋ) import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.util.Arrays; public class Rope.. 2024. 2. 23.
반응형