본문 바로가기

Java78

[JAVA] 백준 - 스타트와 링크 14889 www.acmicpc.net/problem/14889 14889번: 스타트와 링크 예제 2의 경우에 (1, 3, 6), (2, 4, 5)로 팀을 나누면 되고, 예제 3의 경우에는 (1, 2, 4, 5), (3, 6, 7, 8)로 팀을 나누면 된다. www.acmicpc.net onejunu.tistory.com/63?category=882329 [JAVA] 비트 연산자를 이용하여 조합 & 부분집합 & 부분집합 여부파악 아래 배열을 계속 쓸 것이다. int[] arr = new int[]{1,2,3}; # 부분 집합 구하기 코드 생각 없이 그냥 부분 집합을 구한다고 하면 어떻게 구할까?? 1 2 3 1,2 1,3 2,3 1,2,3 그렇다면 비트 마스크로 한다면 아래. onejunu.tistory.com 비.. 2020. 9. 21.
[JAVA] 백준- 연산자 끼워 넣기 14888 www.acmicpc.net/problem/14888 14888번: 연산자 끼워넣기 첫째 줄에 수의 개수 N(2 ≤ N ≤ 11)가 주어진다. 둘째 줄에는 A1, A2, ..., AN이 주어진다. (1 ≤ Ai ≤ 100) 셋째 줄에는 합이 N-1인 4개의 정수가 주어지는데, 차례대로 덧셈(+)의 개수, 뺄셈(-)의 개수, �� www.acmicpc.net 중복된 연산자에 대해서 따로 처리를 해야하는가 생각했는데, 중복계산해도 경우의 수가 10! 밖에 안되서 전체 순열 탐색으로 돌렸더니 통과되었다. import java.util.Scanner; class Main{ static int n; static int[] nums; static int[] operators; static int max = -987.. 2020. 9. 21.
[JAVA] 백준 1399 단어 수학 www.acmicpc.net/problem/1339 1339번: 단어 수학 첫째 줄에 단어의 개수 N(1 ≤ N ≤ 10)이 주어진다. 둘째 줄부터 N개의 줄에 단어가 한 줄에 하나씩 주어진다. 단어는 알파벳 대문자로만 이루어져있다. 모든 단어에 포함되어 있는 알파벳은 최대 www.acmicpc.net 알고리즘 완벽하다고 생각했으나 시간초과가 난 이유는 바로 String 연산 때문이다. AB 에서 A=9 이고 B=8 이라고 할 때, 98로 만드는 과정을 아채처럼 할 경우 int answer = 0; String s = "98"; answer += Integer.parseInt(s); 바로 시간 초과가 나온다. 반면 아래처럼 할 경우 시간초과를 피할 수 있다. int temp = 0; for(char c .. 2020. 9. 21.
[JAVA] 부등호 (백준 2529 ) www.acmicpc.net/problem/2529 2529번: 부등호 여러분은 제시된 부등호 관계를 만족하는 k+1 자리의 최대, 최소 정수를 첫째 줄과 둘째 줄에 각각 출력해야 한다. 단 아래 예(1)과 같이 첫 자리가 0인 경우도 정수에 포함되어야 한다. 모든 입력� www.acmicpc.net 부등호의 수가 3 개 이며 서로 다른 한 자리 숫자 는 4 개 라고 가정해보자. 숫자 0부터9 까지 숫자들 중에 4개를 선택해서 모든 경우의 수를 따져야 하는가?? 그렇지 않다. 가장 작은수와 가장 큰 수를 구하는 것이 목적이기 때문에 가장 작은 수와 가장 큰 수의 조합은 이미 정해져 있다. 12,3,4 와 2,3,4,5 를 선택했다고 가정했을 때, 가장 작은 수는 1,2,3,4 에서 나올것이다. 마찬가지로.. 2020. 9. 21.
[JAVA] next_permutation, prev_permutation static boolean nextPermutation(int[] arr){ int i = arr.length-1; while(i>0 && arr[i-1]>=arr[i]) --i; if(i==0) return false; int j = arr.length - 1; while(arr[i-1]>=arr[j]) --j; int temp = arr[i-1]; arr[i-1] = arr[j]; arr[j] = temp; int k = arr.length-1; while(i 0 && arr[i - 1] 2020. 9. 19.
[JAVA] 소수 찾기 ( 프로그래머스 ) 모든 조합 + 순열을 확인해야하는 문제다. numbers 의 길이가 최대 7개 이므로 최대 경우의 수는 7 + 7*6 + 7*6*5 + 7*6*5*4+7*6*5*4*3 + 7*6*5*4*3*2 + 7*6*5*4*3*2*1 =13699이다. 완전 탐색해도 1초 안에 확인할 수 있는 충분한 경우의 수다. 만약 카드가 1~5까지 5장이 있다고 가정하자. 모든 경우를 탐색하는 DFS를 구현해본다. 아래의 경우의 수는 모든 경우의 수 가지들 중에 일부 가지들이다. 1. 첫번째 자리 ( 모든 한자리 수 검사) 한 자리수의 경우는 1에서 5까지 수 중에서 1가지를 선택할 수 있다. 총 5가지 경우의 수가 있다. 1부터 5까지 숫자를 하나씩 소수인지 아닌지 검사한다. 소수가 맞다면 소수만 모아두는 Set에 넣어둔다. .. 2020. 9. 4.
[일지] Category는 삭제할 수 없다고?? 먼저 도메인 모델을 보자. Category 에서는 CategoryStore를 일대다로 참조하고 있으며, Store 에서는 CategoryStore를 일대다로 참조하고 있다. 또한 Store 에서는 categoryStoreList를 cascade = CascadeType.ALL 옵션을 주었다. 왜?? 만약 가게 사라진다면 가게와 연결해 있던 카테고리들을 모두 삭제해야하기 때문이다. 예시 데이터를 먼저 넣어보자. 여기서 "연우김밥"가게를 삭제해보자. 그러면 어떻게 될까?? 원하는 대로 잘 된다! 다시 원상 복귀하자. 그렇다면 여기서 김밥이라는 카테고리를 삭제하면 김밥을 참조하고있는 categoryStore도 삭제해야 될 것이다. 그래서 카테고리에 아래처럼 해주고 "김밥"을 삭제하면 category_store.. 2020. 9. 2.
[JAVA] 2048(Easy) 삼성 기출 문제 (백준 12100) 전형적인 구현 문제 상하좌우를 그대로 구현했는데 다른 사람들 풀이 보니까 rotate 를 구현하고 방향 하나만 구현한 것이 많이 보였다.. 이렇게하면 확실히 코드 길이는 줄어 들듯 하다. 내 코드를 보면서 불필요한 부분들이 몇개 발견되었다. 먼저 나의 풀이를 소개한다. 만약 배열의 한줄만 생각한다고 가정하자. [2,2,0,4,4] 의 배열이 있을 때 오른쪽으로 이동하면 [0,0,0,4,8] 왼쪽으로 이동하면 [4,8,0,0,0] 이렇게 될 것이다. 왼쪽으로 이동할 때 어떻게 풀었는지 보자. 똑같은 크기의 0으로 가득차있는 배열 tmp = [0,0,0,0,0] 를 선언및 초기화한다. 그리고 비어있는 Deque 한개를 선언하고 boolean으로 ok =true를 선언하여 이전에 합쳐졌는지 안 합쳐졌는지 체크.. 2020. 9. 1.
백트래킹을 이용한 순열 in java static ArrayList nPkV2(int[] arr,int k){ ArrayList ret = new ArrayList(); boolean[] visited = new boolean[arr.length]; int[] resList = new int[k]; nPkdfsV2(ret,arr,resList,visited,k,0); return ret; } static void nPkdfsV2(ArrayList ret, int[] arr, int[] resList, boolean[] visited, int k,int idx){ if(k==idx){ List tmp = new ArrayList(); for(int i=0;i 2020. 8. 30.