백준 251

[백준, 자바, 20920번] 영단어 암기는 괴로워

풀이해당 문제는 다양한 방법이 있을 것 같은데우선 아래의 풀이는 다음과 같음입력으로 주어지는 단어를 확인 후 조건에 따라 분류하는데우선 길이가 M이상의 경우를 체크한 뒤Map에 추가가 되어 있다면 카운팅을 1 증가 하고없다면 초기화를 해주는데초기화 할 때는, 출력 조건을 위한 정렬을 위해현재 단어와, 카운팅 이렇게 두개의 값을 함께 초기화 해주기.이후 Map의 value를 List로 변환하고, 조건에 따라 정렬해주고 출력하여 해결. import java.io.*;import java.util.*;public class _20920 { public static void main(String[] args) throws IOException { BufferedReader br = new Bu..

알고리즘 2024.11.18

[백준, 자바, 2346번] 풍선 터뜨리기

풀이해당 문제를 푸는 방법은 다양하게 있을 듯하다.다만 나는 배열을 새롭게 계속 변형하는 것은 효율적이지 않다고 생각하여인덱스를 사용해서 해결하고자 함.다만 처음에 간과했던 부분은 이미 터뜨린 풍선을 지나갈 때카운팅을 해버려서 계속 오답으로 나왔음.그래서 해당 문제를 이후에 깨닫고 나서는for문을 거쳐서 하나씩 이동하면서 해당 위치가 이미 터뜨린 풍선의 위치라면while문을 거치게 하여 터뜨리지 않은 풍선을 찾으며 해결하고자 하여 해결 import java.util.Scanner;import java.io.*;public class _2346 { public static void main(String[] args) throws IOException { Scanner sc = new Sc..

알고리즘 2024.11.14

[백준, 자바, 13909번] 창문 닫기

풀이해당 문제는 일반적인 방법으로 해결할 수 없다는 걸 알게 됨..이유는 배열을 N개 만큼 만들게 되면 메모리 초과가 발생함.그래서 다른 방법이 없을까 하나씩 찾아보니그냥 어떤 분기에서 변화가 있는지 Set에 넣어보면서 찾다보니계차수열 규칙을 발견// 1 -> 1// 2 -> 1 0// 3 -> 1 0 0// 4 -> 1 0 0 1// 5 -> 1 0 0 1 0// 6 -> 1 0 0 1 0 0// 7 -> 1 0 0 1 0 0 0// 8 -> 1 0 0 1 0 0 0 0// 9 -> 1 0 0 1 0 0 0 0 1// 10 -> 1 0 0 1 0 0 0 0 1 0// 11 -> 1 0 0 1 0 0 0 0 1 0 0// 12 -> 1 0 0 1..

알고리즘 2024.11.13

[백준, 자바, 17103번] 골드바흐 파티션

풀이해당 문제는 짝수의 입력값이 주어졌을 때,두 소수의 합이 입력값이 되는 경우를 카운팅 하는 문제로기존 소수를 구한 것처럼, 에라토스테네스의 체를 활용하여소수를 모두 배열에 넣은 다음2중 for문으로 찾으면서, 합이 큰 경우에 대한 조건 분기를 통해시간 효율을 줄이고자 했지만, 계속해서 시간 초과...그래서 어떤 힌트가 있을지 찾아보니,(인풋값 - 소수) 의 결과값이 소수인가(bool)?를 확인 이라는 문장을 보고허거덩하고 생각한 건, 찾은 소수를 Set에 넣고 좀 더 빠르게 확인하는 방법이 떠올라서아래와 같이 해결할 수 있었음.실패한 코드도 아래에 작성.  // 성공import java.io.*;import java.util.*;public class _17103 { public static v..

알고리즘 2024.11.13

[백준, 자바, 4948번] 베르트랑 공준

풀이해당 문제는 특정 정수보다 크면서 2배한 것 보다 작거나 같은모든 소수를 구하는 문제로서입력값은 0이 나올 때까지 받기에우선은 모든 입력 값을 배열에 담아두면서가장 큰 값을 찾고, 이후에 큰 값의 2배에 해당 하는 배열을 만들어서모든 소수를 에라토스테네스의 체를 활용하여 판별한 뒤이후 배열을 돌려가며 범위에 해당하는 소수를 카운팅하여 해결. import java.io.*;import java.util.*;public class _4948 { public static void main(String[] args) throws IOException { Scanner sc = new Scanner(System.in); BufferedWriter bw = new BufferedW..

알고리즘 2024.11.13

[백준, 자바, 2581번] 소수

풀이이전 소수 찾기 문제를 통해 알게 된에라토스테네스의 체를 활용하여 해결우선 값이 더 큰  N을 기준으로 boolean 배열을 만들고2부터 배수가 되는 인덱스에 값을 true로 변경하고이후 범위를 M과 N 사이에 해당 하는 값을 조건에 따라처리하여 해결 import java.util.Scanner;public class _2581 { public static void main(String[] args) { Scanner sc = new Scanner(System.in); int M = sc.nextInt(); int N = sc.nextInt(); boolean[] li = new boolean[N+1]; li[1] = true; ..

알고리즘 2024.11.13

[백준, 자바, 4134번] 다음 소수

풀이해당 문제는 뭔가 좀 아리송했다.이유는 범위가 40억까지라서 int 타입으로는 해결이 불가하다보니처음 고안했던, 가장 큰값을 기준으로 모든 소수를 구한 다음이분 탐색으로 해당 값을 찾는 형식으로 하려고 했는데,계속 시간초과가 발생해서 이유를 뭔가하고 생각해보니중간에 인덱스에 접근하기 위해 int 타입으로 변환한 것 때문에음수로 뭔가 변경되어 발생한 문제가 아닐까하고 생각이 듬... (확실하진 않지만)그래서 그냥 단순히 값을 가져오면 각각의 수에 대한 소수를 판별하고자 함.그리고 int 타입으로 인덱스에 접근 가능하며, 다량의 소수를 판별하고자 할 경우엔에라토스테네스의 체를 생각해내어 해결하면 될 듯하다.2중 for문을 활용해서 i의 배수가 되는 인덱스 값을 모두 지우는 형식으로 빠르게 소수를 구분할 ..

알고리즘 2024.11.12

[백준, 자바, 1735번] 분수 합

풀이해당 문제에선 고민이 되었던 것은분자가 분모보다 값이 큰 것까지 고려해야할 까? 였는데우선 거기까지는 생각하지 말고 해결해보자는 마음으로 해결했음.우선 분모의 최대공약수를 찾고 그에 따라각 분수의 분자를 곱해준 뒤,합한 분수의 분자와 분모에 대한 GCD를 계속 구하면서1이 나올때까지 반복하여 기약분수로 만들어주면서 해결. import java.util.Scanner;public class _1735 { public static void main(String[] args) { Scanner sc = new Scanner(System.in); int a1 = sc.nextInt(); int a2 = sc.nextInt(); int b1 = sc.ne..

알고리즘 2024.11.12

[백준, 자바, 1620번] 나는야 포켓몬 마스터 이다솜

풀이알고리즘을 풀 때, 뭔가 항상 효율적으로 풀자라는 생각에시간이 좀 오래걸리는 경우도 있었는데이제는 그냥 단순히 최대한 빨리 푸는 것에 집중하고자 다짐우선 해당 문제에선 빠르게 풀기 위해선그냥 Map과 배열을 모두 활용하는게 좋을 것 같아그대로 적용해보니 수월하게 풀이 완료.다만 입력값이 문자열인지 숫자인지 정확하지 않은 것에 대한판별을 위해서, 별도의 함수를 작성.해당 함수는 정규식을 활용해서 숫자인지 문자인지 판별.이후 다른 코드를 보면서 입력값이 일정하게 정수, 문자열로만 주어진다면두 번째 코드로 해결한다면 더 빠르게 해결할 수 있음. // 첫 번째 코드import java.io.*;import java.util.*;public class _1620 { public static void ma..

알고리즘 2024.11.12