[JAVA] 2910-빈도정렬 🩶3: 정렬 로직을 자유자제로 적용하자
·
Problem Solve
들어가며https://www.acmicpc.net/problem/2910문제의 요구사항은 N개의 숫자가 들어오면 그 숫자의 빈도대로 정렬하여 출력하는 것이었다. 즉 많이 나온 숫자 먼저 출력해야한다. 단, 빈도가 같을 경우 먼저 나온 숫자를 출력해야하는 것이 골치 아픈 포인트였다.본론으로딱 보자마자 음.. 개수를 카운팅 하는 배열을 만들어서 arr[num]++; 식으로 진행해야겠다~ 싶었다. 하지만 들어오는 수의 범위를 보면(1 다행인 것은 들어오는 숫자의 갯수가 (1 시간복잡도 보다는 들어오는 숫자의 범위가 커서 다른 자료구조를 떠올려야 하는 문제다.값 - 카운팅 해야하니 자연스럽게 생각은 Map 자료구조나 List자료구조로 옮겨진다. 그래서 정답코드는 많은 우여곡절 끝에 아래와 같이 작성했다.publ..
[JAVA] 1629번-곱셈 🩶1, 4375번-1 🩶3 : 자료형의 범위를 벗어나는 상황에서는 모듈러 연산의 특징을 이용하자. (정수론)
·
Problem Solve
문제 1. 곱셈(1629번)https://www.acmicpc.net/problem/1629문제는 매우 간단했다. A를 B번 곱한 값을 C로 나눈 나머지를 구하는 것이었다. 즉 (A^B) % C = ? 이다. 그래서 난 처음에는 직관적으로 아래와 같은 코드를 작성했다.public class Main { public static void main(String[] args) throws Exception { BufferedReader bf = new BufferedReader(new InputStreamReader(System.in)); StringTokenizer st = new StringTokenizer(bf.readLine()); long A = Integ..
[JAVA] 11286번 절댓값 힙 🩶1 : 시간초과...💥 우선순위 큐(Priority Queue)가 뭔데..?
·
Problem Solve
들어가며https://www.acmicpc.net/problem/11286문제는 간단하게 정리하자면 입력값에 대해 절댓값이 작은 순서대로 출력하는 것이다.(절댓값이 같은 경우는 음수를 우선으로 한다.)문제를 딱 읽자마자 든 생각은 이중포문으로 정렬하기 -> ArrayDeque를 이용한 정렬방식이었다..! 하지만 코드는 if, while문 덕지덕지가 되어가고... 가장 큰 문제는 시간초과였다. 내가 알고있는 그 어떤 정렬방식, 자료구조를 써봐도 시간초과를 벗어날 수가 없었다(입력 수는 10만이었다.. O(N^2)을 벗어나지 못하면 시간복잡도가 터지는 상황이었다.). 2시간쯤 되었을 때 결국 답지를 봤다. 코드가 매우짧았다. 그곳에선 우선순위 큐(Priority Queue)를 적용하고 있었다.값을 추가할 때..
[JAVA] 2581번 소수 🤎2 : 에라토스테네스의 체 알고리즘으로 시간복잡도를 줄이자!
·
Problem Solve
https://www.acmicpc.net/problem/2581문제 자연수 M과 N이 주어질 때 M이상 N이하의 자연수 중 소수인 것을 모두 골라 이들 소수의 합과 최솟값을 찾는 프로그램을 작성하시오.예를 들어 M=60, N=100인 경우 60이상 100이하의 자연수 중 소수는 61, 67, 71, 73, 79, 83, 89, 97 총 8개가 있으므로, 이들 소수의 합은 620이고, 최솟값은 61이 된다. 입력입력의 첫째 줄에 M이, 둘째 줄에 N이 주어진다.M과 N은 10,000이하의 자연수이며, M은 N보다 작거나 같다.출력M이상 N이하의 자연수 중 소수인 것을 모두 찾아 첫째 줄에 그 합을, 둘째 줄에 그 중 최솟값을 출력한다. 단, M이상 N이하의 자연수 중 소수가 없을 경우는 첫째 줄에 -1을..
[JAVA] 2231번 분해합 🤎2 : 구현만 하면 되는데...! 😂
·
Problem Solve
https://www.acmicpc.net/problem/2231 문제어떤 자연수 N이 있을 때, 그 자연수 N의 분해합은 N과 N을 이루는 각 자리수의 합을 의미한다. 어떤 자연수 M의 분해합이 N인 경우, M을 N의 생성자라 한다. 예를 들어, 245의 분해합은 256(=245+2+4+5)이 된다. 따라서 245는 256의 생성자가 된다. 물론, 어떤 자연수의 경우에는 생성자가 없을 수도 있다. 반대로, 생성자가 여러 개인 자연수도 있을 수 있다.자연수 N이 주어졌을 때, N의 가장 작은 생성자를 구해내는 프로그램을 작성하시오.입력첫째 줄에 자연수 N(1 ≤ N ≤ 1,000,000)이 주어진다.출력첫째 줄에 답을 출력한다. 생성자가 없는 경우에는 0을 출력한다.해설 및 생각결론 먼저 말하자면 진짜 ..
[JAVA] 2798번 블랙잭 🤎2 : 나의 첫 무서운 브루트포스 알고리즘 풀이
·
Problem Solve
https://www.acmicpc.net/problem/2798 입력첫째 줄에 카드의 개수 N(3 ≤ N ≤ 100)과 M(10 ≤ M ≤ 300,000)이 주어진다. 둘째 줄에는 카드에 쓰여 있는 수가 주어지며, 이 값은 100,000을 넘지 않는 양의 정수이다.합이 M을 넘지 않는 카드 3장을 찾을 수 있는 경우만 입력으로 주어진다.출력첫째 줄에 M을 넘지 않으면서 M에 최대한 가까운 카드 3장의 합을 출력한다. 나의 생각문제 이해 자체는 그렇게 어렵지 않다. 그냥 N번만큼 숫자를 받고 3개씩 더해서 그 합이 M을 넘지 않으면서 M과 최대한 가깝게 하는 합을 구하면 되는 것이다.와 근데 딱 든 생각은 아니 경우의 수가 너무 많은데??? 였다.그래서 최대한 간결하게 풀 수 있는 방법이 없을까... ..
[JAVA] 백준 1978번 소수찾기 🤎2 : 소수의 약수 범위에 대한 매우 중요한 생각!
·
Problem Solve
https://www.acmicpc.net/problem/1978 백준 1978번 소수 찾기 문제를 풀 때에 소수에 관한 생각은 앞으로 소수 판별이 필요한 곳에 굉장히 많이 쓰일 것 같아 한번 정리 해보기로 했다. 문제는 말 그대로 소수면 카운팅해서 몇개인지 출력하는 문제이다 먼저 가장 먼저 든 생각은 소수의 정의가1보다 크고 약수가 자신과 1 이외에 없는 수가 소수. 이니깐 그대로 한번 해보았다.import java.util.Scanner;public class Main { public static void main(String[] args) { Scanner sc = new Scanner(System.in); int N = sc.nextInt(); int c..
[JAVA] 10809번 알파벳 찾기 🤎2 : 아스키코드를 활용한 문자열 갯수 카운팅하기!
·
Problem Solve
https://www.acmicpc.net/problem/10809 Baekjoon 10809번 문제는 주어진 문자열에서 각 알파벳이 처음 등장하는 위치를 구하는 문제 import java.util.Scanner;public class Main { public static void main(String[] args) { Scanner sc = new Scanner(System.in); String input = sc.nextLine(); // 각 알파벳의 등장 위치를 저장할 배열 초기화 int[] positions = new int[26]; for (int i = 0; i 문자열을 카운팅 하고 싶을 때 문자- '0'을 하면 아스키코..
[JAVA]백준 3052번 🤎2 : (나의 첫 Set 자료구조를 이용한 백준 문제!)
·
Problem Solve
여태까지 자료구조 이것저것들은 배웠었는데, 문제풀이에서는 제대로 한번도 못써봤었다. https://www.acmicpc.net/problem/3052문제 설명 : 10개의 랜덤으로 주어진 숫자를 42로 나누었을 때 겹치지 않는 갯수를 구하여라(많이 요약함)문제풀이 : 1. 딱 든 생각이 중복을 제거 해야겠는데? 어? 중복 ? Set이 중복 제거하는 자료구조형 아니었나? 하고 풀이에 들어갔다2. 사실 자바 Set자료구조형 선언하는거 어색해서 Intellij의 도움을 받아서 찍듯이 해보았다.import java.util.HashSet;import java.util.Scanner;import java.util.Set;public class Main { public static void main(Strin..
[JAVA]백준 2903번 중앙 이동 알고리즘 🤎3 : 풀이 규칙을 잘 찾자!
·
Problem Solve
https://www.acmicpc.net/problem/2903 문제 설명:백준 2903번 문제는 1x1 정사각형에서 시작해 각 반복마다 점의 개수를 계산하는 문제입니다. 이 문제는 점의 수가 증가하는 규칙을 파악하는 것이 핵심입니다.문제 이해:시작 상태는 1x1 정사각형입니다.각 반복 단계마다 축의 선분 수가 두 배로 증가합니다. (이런 규칙도 보인다.)n번 반복 후 전체 점의 수를 구해야 합니다.성장 패턴 분석:단계별로 점의 수를 확인해봅시다:0번째 반복 (초기 상태):점의 수: (2x2) = 4개1번째 반복:각 축의 선분 수가 2배가 됨.점의 수: (2 + 1) x (2 + 1) = 3x3 = 9개2번째 반복:각 축의 선분 수가 2^2이 됨.점의 수: (2^2 + 1) x (2^2 + 1) = 5..