본문 바로가기

Algorithm/[BOJ] - JAVA

(173)
[백준] 1158 : 요세푸스 문제 JAVA 풀이 import java.io.*; import java.util.*; public class Main { public static void main(String[] args) throws IOException{ BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); Queue queue = new LinkedList(); StringTokenizer st = new StringTokenizer(br.readLine(), " "); int N = Integer.parseInt(st.nextToken()); int K = Integer.parseInt(st.nextToken()); // 1부터 N까지의 숫자를 큐에 넣음 for(int..
[백준] 10866 : 덱 JAVA 풀이 기본적인 ArrayList 클래스의 메서드로 풀었다. deque로 푸는 건 또 나중에... import java.io.*; import java.util.*; public class Main{ static ArrayList list = new ArrayList(); public static void main(String[] args)throws IOException{ BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); int n = Integer.parseInt(br.readLine()); StringBuilder sb = new StringBuilder(); for(int i=0;i
[백준] 6588 : 골드바흐의 추측 JAVA 풀이 에라토스테네스의 체로 소수를 판별하고 그 소수들을 ArrayList에 추가한다. 리스트를 앞과 뒤에서부터 읽어 a+b가 n이 되면 출력을 한 뒤 반복문을 종료한다. 이런 식으로 코드를 작성해볼까 했는데 너무 비효율적인 것 같아 방향을 틀었다. 초기에 구상한 코드 import java.io.*; import java.util.*; public class Main { static boolean[] prime = new boolean[1000001]; static ArrayList list = new ArrayList(); public static void main(String[] args) throws IOException{ BufferedReader br = new BufferedReader(new Inp..
[백준] 2004 : 조합 0의 개수 JAVA 풀이 팩토리얼 0의 개수 문제와 유사한 문제였다. 뒷자리가 0이라는 건 2와 5가 곱해졌다는 뜻이므로 분모와 분자가 서로소일 때 분자에 남은 2와 5가 짝을 이루는 쌍의 개수가 몇개인지 세면 되겠다는 생각이 들었다. N = 25, M = 12 가 입력됐을 경우 분자는 25 ~ 25-12+1인 14까지를 곱한 값 분모는 12부터 1까지를 곱한 값이 된다. twoCnt = 분자의 2의 개수 - 분모의 2의 개수 - 필요없는 구간의 2의 개수 fivecnt = 분자의 5의 개수 - 분모의 5의 개수 - 필요없는 구간의 5의 개수 두 개의 값을 구한 뒤 더 작은 값을 출력하도록 했다. (여기서 필요없는 구간이란 25~14 이외의 구간이다.) 두 개의 값 중 더 작은 값을 구하는 이유는, 2와 5가 짝을 이룰 때 뒷자..
[백준] 2089 : -2진수 JAVA 풀이 음..자꾸 오답 판정이 나와서 다른 사람들의 풀이과정을 참고했다. 예제 입력에 나온 -13은 -13 = (-2) * 7 + 1 7 = (-2) * 3 + 1 -3 = (-2) * 2 + 1 2 = (-2) * (-1) + 0 -1 = (-2) * (1) + 1 1 = (-2) * 0 + 1 이렇게 풀어볼 수 있다. 노란색으로 표시한 숫자를 아래부터 읽으면 110111 예제 출력과 일치하는 것을 확인할 수 있다. 여기서 첫 번째 식에 주목하자. 사실 -13 / -2를 계산하면 몫이 6이 되고 나머지가 -1이 되어 -13 = (-2) * (6) + (-1)이 된다. 하지만 -2진수는 각 자리에 0또는 1만 올 수 있기 때문에 문제가 발생한다. 따라서 이렇게 n % -2의 결과가 -1인 경우에는 몫에 +1을 ..
[백준] 1676 : 팩토리얼 0의 개수 JAVA 풀이 처음에는 n을 입력받고 팩토리얼값을 구한 뒤 뒤에서부터 0의 개수를 세려고 했다. 하지만 n이 커질 경우 BigInteger 클래스를 사용하지 않고서는 담을 수 없는 경우가 발생하게 된다. 그래서 다른 해결방법이 있을 것 같아 서치를 하다 이 포스트를 발견했다. https://st-lab.tistory.com/165 [백준] 1676번 : 팩토리얼 0의 개수 - JAVA [자바] www.acmicpc.net/problem/1676 1676번: 팩토리얼 0의 개수 N!에서 뒤에서부터 처음 0이 아닌 숫자가 나올 때까지 0의 개수를 구하는 프로그램을 작성하시오. www.acmicpc.net 문제 정말 정말 쉬운 문제다. 알고리 st-lab.tistory.com 소인수분해를 했을 때 2와 5가 존재하면 뒷자리..
[백준] 11576 : Base Conversion JAVA 풀이 1. 입력받은 A와 B를 저장한다. 2. N을 저장한다. 3. A진수로 입력되는 N자릿수의 숫자를 10진수로 바꾼 값을 저장할 sum을 생성한다. 4. N자리의 A진수 값들을 10진수로 바꿔 sum에 더한다. 5. sum을 B진수로 바꾼 값을 각 자리수별로 저장할 ArrayList인 list를 생성한다. 6. sum을 B진수로 바꾼 값을 list에 한 자리씩 저장한다. 7. list에 저장된 값을 역순으로 출력한다. import java.io.*; import java.util.*; public class Main{ public static void main(String[] args) throws IOException { BufferedReader br = new BufferedReader(new Inp..
[백준] 1212 : 8진수 2진수 JAVA 풀이 Integer.toBinaryString()메서드는 Integer를 2진수로 바꿔주는데, 3일 경우는 011이 아니라 11로 바꿔준다. 이 문제에서는 8진수를 2진수로 바꿔야 하므로 변환된 값이 세 자리가 아닌 경우에는 앞에 0을 붙여줘야 한다. 그리고 수가 0인 경우를 제외하고는 반드시 1로 시작해야 한다는 조건도 주의해야 한다. import java.io.*; import java.util.*; public class Main { public static void main(String[] args) throws IOException { BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); String str = br.rea..