개요위 문제는 최대 연산의 수(M)가 3,000,000이기 때문에 반복문을 사용하면 안될 것 같아 HashMap 자료구조를 사용하여 문제를 해결하였다. 해당 문제를 해결한 후 다른 사람들이 어떤 방식으로 풀었는지 확인할 결과 비트마스크 알고리즘을 사용하여 푼 방식이 존재하여 필자는 아래 2가지 방법으로 문제를 풀어보았다. 성공소스1. HashMap 사용add: map의 containsKey와 put 메서드를 사용하여 x값을 추가한다.remove: map의 remove 메서드를 사용하여 x값을 제거한다.toggle: map의 containsKey 메서드와 put, remove 메서드를 활용한다.all: 반복문을 사용하여 1 ~ 20을 map에 put한다.empty: map의 clear 메서드를 사용한다.참..
이번 문제는 1%에서 틀렸다고 나왔는데 아직 해당 문제의 원인을 찾지 못했다... 원인을 계속 찾아보는데 시간이 너무 오래 걸릴 것 같아 기존에 듣던 인강을 마저 듣기로 하고 내일 다시 문제를 풀 예정이다. 오늘까지 작성한 소스는 아래와 같다. 실패한 소스public class Main { public static void main(String[] args) throws IOException{ BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); StringTokenizer st = new StringTokenizer(br.readLine()); // 최대 인벤토리 크기 final i..
이번 문제의 난이도는 실버 4이고 정답률은 낮지만 상당히 쉬운 문제였다. 브론즈 난이도의 문제 중에 이 문제보다 어려운 문제들이 더 많은데 왜 실버 4인지는 잘 모르겠다. - 구현 소스public class Main { public static void main(String[] args) throws IOException { BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); int n = Integer.parseInt(br.readLine()); int[] arrDifficulty = new int[n]; for (int i = 0; i 이제 solved.ac 사..
이번 문제는 친절하게도 문제에서 어떻게 연산을 하라고 다 알려주고 있지만 필자는 처음에 50점을 맞았다... 필자의 처음 생각으로는 알파벳 a가 1이 나와야 하고 a의 아스키코드 값이 96이니까 -95를 더했고$a_i * r^i$ 이 수식은 반복문을 사용하며 제곱의 경우 Math 클래스의 pow 메서드를 사용하면 되겠다고 생각을 하였다.그러나 오버플로우가 발생하여 50점이 나왔다. 실패한 소스 - 오버플로우 발생final int NUMBER = 31;final int M = 1234567891;int l = Integer.parseInt(br.readLine());String str = br.readLine();long sum = 0L;for (int i = 0; i 어떻게 보면 당연한 것을 놓쳐버렸다..
이번 문제는 아래 4가지 요소들을 찾는 문제로 난이도가 낮아보였는데 정답 비율도 낮아서 처음엔 의아했다. 산술평균 : N개의 수들의 합을 N으로 나눈 값중앙값 : N개의 수들을 증가하는 순서로 나열했을 경우 그 중앙에 위치하는 값최빈값 : N개의 수들 중 가장 많이 나타나는 값범위 : N개의 수들 중 최댓값과 최솟값의 차이 산술평균 소스산술평균은 입력된 모든 값들을 더한 후 배열의 길이로 나누어 주었다. 입력된 값의 범위가 -4000 ~ 4000이고 입력값의 최대 개수가 50만개이기 때문에 sum 변수의 자료형을 double로 선언하였다.int n = Integer.parseInt(br.readLine());final int[] arr = new int[n];double sum = 0;// 산술평균for..
이번 문제는 문제를 이해하는 데에만 시간이 좀 걸렸다. 처음에는 예제 입력 3번째 줄의 각 수를 8진수로 변환한 후 출력하는 것으로 알고 풀어 예제 출력 중 6이 아닌 4 2가 나와서 이상함을 느꼈다. 예제 입력을 정리하면 입력의 2번째 줄은 A진법 수의 자릿수의 개수를 나타내고 3번째 줄은 각 자릿수이다. 예를 들어 3번째 줄 첫 번째 입력인 2는 $2 * 17^1$, 16은 $16 * 17^0$이고 10진수로는 $34 + 16 = 50$이다. 그러므로 10진수로 변환한 50을 B진법으로 변환하면 해결된다. 성공 소스public class _11576 { public static void main(String[] args) throws IOException{ BufferedR..
이번 문제는 이전에 포스팅하였던 2745번 문제 풀이를 반대로 진행하면 된다. https://jiji-gilog.tistory.com/13 [백준] 2745번 : 진법 변환 - JAVA임의의 진수와 해당 진수로 이루어져 있는 값을 10진수로 변환하는 문제이다. 예를 들어 8진수 77은 이진수로 1 1 1 1 1 1이고(8진수는 2진수를 3자리씩 자름, 2진수로 8은 111) 10진수로 변경하면 63이jiji-gilog.tistory.com 10진수를 임의의(B) 진수로 변환하는 방법은 10진수 값(N)을 B로 나누고 나머지를 출력하면 된다.예를 들어 8을 2진수로 변환한다고 하면 8을 2로 몫이 0이 될 때까지 나누는 작업을 반복하며 나머지를 저장하고 역순으로 출력하면 된다. 해당 문제는 10진수를 임..
이번 문제는 임의의 진수와 해당 진수로 이루어져 있는 값을 입력받아 10진수로 변환하는 문제이다.예를 들어 8진수 77은 이진수로 1 1 1 1 1 1이고(8진수는 2진수를 3자리씩 자름, 2진수로 8은 111) 10진수로 변경하면 63이다. $8^1 * 7 + 8^0 * 7 = 63$ 성공 소스public class Main { public static void main(String[] args) throws IOException{ BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); StringTokenizer st = new StringTokenizer(br.readLine()); ..