diff --git a/.github/ISSUE_TEMPLATE/Bug_report.md b/.github/ISSUE_TEMPLATE/Bug_report.md
new file mode 100644
index 0000000..4de26c7
--- /dev/null
+++ b/.github/ISSUE_TEMPLATE/Bug_report.md
@@ -0,0 +1,35 @@
+---
+name: Bug report
+about: Create a report to help us improve
+
+---
+
+**Describe the bug**
+A clear and concise description of what the bug is.
+
+**To Reproduce**
+Steps to reproduce the behavior:
+1. Go to '...'
+2. Click on '....'
+3. Scroll down to '....'
+4. See error
+
+**Expected behavior**
+A clear and concise description of what you expected to happen.
+
+**Screenshots**
+If applicable, add screenshots to help explain your problem.
+
+**Desktop (please complete the following information):**
+ - OS: [e.g. iOS]
+ - Browser [e.g. chrome, safari]
+ - Version [e.g. 22]
+
+**Smartphone (please complete the following information):**
+ - Device: [e.g. iPhone6]
+ - OS: [e.g. iOS8.1]
+ - Browser [e.g. stock browser, safari]
+ - Version [e.g. 22]
+
+**Additional context**
+Add any other context about the problem here.
diff --git a/.github/ISSUE_TEMPLATE/Custom.md b/.github/ISSUE_TEMPLATE/Custom.md
new file mode 100644
index 0000000..daf862c
--- /dev/null
+++ b/.github/ISSUE_TEMPLATE/Custom.md
@@ -0,0 +1,7 @@
+---
+name: Custom issue template
+about: Describe this issue template's purpose here.
+
+---
+
+
diff --git a/.github/ISSUE_TEMPLATE/Feature_request.md b/.github/ISSUE_TEMPLATE/Feature_request.md
new file mode 100644
index 0000000..5384295
--- /dev/null
+++ b/.github/ISSUE_TEMPLATE/Feature_request.md
@@ -0,0 +1,17 @@
+---
+name: Feature request
+about: Suggest an idea for this project
+
+---
+
+**Is your feature request related to a problem? Please describe.**
+A clear and concise description of what the problem is. Ex. I'm always frustrated when [...]
+
+**Describe the solution you'd like**
+A clear and concise description of what you want to happen.
+
+**Describe alternatives you've considered**
+A clear and concise description of any alternative solutions or features you've considered.
+
+**Additional context**
+Add any other context or screenshots about the feature request here.
diff --git a/.github/PULL_REQUEST_TEMPLATE/pull_request_template.md b/.github/PULL_REQUEST_TEMPLATE/pull_request_template.md
new file mode 100644
index 0000000..5146a14
--- /dev/null
+++ b/.github/PULL_REQUEST_TEMPLATE/pull_request_template.md
@@ -0,0 +1,9 @@
+- [Problem link](실제 url을 적어요)
+
+## 접근 방법
+자유롭게 기술
+
+## 채점 결과
+| Task Score | Correctness | Performance |
+| ------------ | ------------- | ------------- |
+| 00% | 00% | 00% |
diff --git a/.gitignore b/.gitignore
index a1c2a23..f88178b 100644
--- a/.gitignore
+++ b/.gitignore
@@ -21,3 +21,7 @@
# virtual machine crash logs, see http://www.java.com/en/download/help/error_hotspot.xml
hs_err_pid*
+
+
+
+
diff --git a/README.md b/README.md
index dd00f5b..cb06e8e 100644
--- a/README.md
+++ b/README.md
@@ -1,2 +1,5 @@
# algorithmSolution
Codility, HackerRank 등 코딩테스트 플랫폼에서 알고리즘 풀이 수련
+
+## Log
+- 2018/06/09 Lesson03,04 풀이
diff --git a/hojin/Algorithm/codility/lesson05/CountDiv.md b/hojin/Algorithm/codility/lesson05/CountDiv.md
new file mode 100644
index 0000000..4c5f290
--- /dev/null
+++ b/hojin/Algorithm/codility/lesson05/CountDiv.md
@@ -0,0 +1,37 @@
+- [CountDiv](https:app.codility.com/programmers/lessons/5-prefix_sums/count_div/)
+
+## 접근 방법
+# 첫번 째 방법
+ 1. end와 start사이에 k가 몇번 들어가는지 구하자
+ 2. 그리고 start와 end가 k로 나누어 떨어진다면 +1씩 해주자.
+
+# 두번 째 방법
+ 1. 0부터 end까지 k의 몇배수 까지 들어갈 수 있는지 구하자
+ 2. 0부터 start까지 k의 몇배수까지 들어갈 수 있는지 구하자
+ 3. start가 k의 배수일때는 +1를 추가한다, 이유 : 문제 제시가 start를 포함한 범위부터 구하기를 제시하기 때문
+ 4. (1)-(2)를 해주자
+
+## 소스코드
+
+~~~java
+public int solution(int A, int B, int K) {
+
+ return this.test(A, B, K);
+}
+public int test(int start, int end, int k){
+ int temp = end/k - start/k;
+ if(start%k==0){
+ temp+=1;
+ }
+ return temp;
+}
+~~~
+
+## 개선사항
+
+## 시간복잡도를 주링기 위해 생각한 점, 반영한 점
+
+## 채점 결과
+| Task Score | Correctness | Performance |
+| ------------ | ------------- | ------------- |
+| 100% | 100% | 100% |
diff --git a/hojin/Algorithm/codility/lesson05/GenomicRangeQuery.md b/hojin/Algorithm/codility/lesson05/GenomicRangeQuery.md
new file mode 100644
index 0000000..3bb3302
--- /dev/null
+++ b/hojin/Algorithm/codility/lesson05/GenomicRangeQuery.md
@@ -0,0 +1,63 @@
+- [GenomicRangeQuery](https://app.codility.com/programmers/lessons/5-prefix_sums/genomic_range_query/)
+
+## 접근 방법
+
+
+# 첫번 째 방법
+ 1. 비교를 쉽게 하기 위해서 String[]을 int[]로 변환 한다.
+ 2. 변환시 for문을 최대한 적게 돌기 위하여 탐색에 필요한 부분만 변환한다.
+ 3. p값과 q값에서 최소 값을 찾는다.
+# 두번 째 방법
+
+## 소스코드
+
+~~~java
+public int[] solution(String s, int[] p, int[] q){
+ int intS[] = new int[s.length()];
+ int result[] = new int[p.length];
+
+ for(int i=0;i
parserInt){
+ min = parserInt;
+ if(parserInt == 1){
+ return 1;
+ }
+ }
+ }
+ return min;
+ }
+~~~
+
+## 개선필요한 사항
+ 1. String[] ->int[] parser를 미리 하는게 좋을 것 같다. ( 중복되서 parser를 하는 듯 하다. )
+ 2. 시간복잡도가 N*M이므로 줄여야 된다.
+
+
+## 시간복잡도를 주링기 위해 생각한 점, 반영한 점
+ 1. 탐색해야되는 길이(M)만큼 for문을 돌면 안되고, 바로 값을 알 수 있는 연산이 필요하다. 즉, 2~4라고 가정했을 때 탐색없이 답을 찾아야 한다.
+
+## 채점 결과
+| Task Score | Correctness | Performance |
+| ------------ | ------------- | ------------- |
+| 62% | 100% | 0% |
diff --git a/hojin/Algorithm/codility/lesson05/PassingCars.md b/hojin/Algorithm/codility/lesson05/PassingCars.md
new file mode 100644
index 0000000..f20d6fe
--- /dev/null
+++ b/hojin/Algorithm/codility/lesson05/PassingCars.md
@@ -0,0 +1,63 @@
+- [PassingCars](https://app.codility.com/programmers/lessons/5-prefix_sums/passing_cars/)
+
+## 접근 방법
+# 첫번 째 방법
+ 1. 입력 배열값 중 값이 0인 인덱스를 값으로 저장되는 배열을 만든다 int zero[]
+ 2. 입력 배열값 중 값이 1인 인덱스를 값으로 저장되는 배열을 만든다 int one[]
+ 3. 이슈사항
+ 1. (P,Q)를 쌍으로 지정할 때 P < Q라는 조건이 있다
+ 2. 이를 해결하기 위해서 (1),(2)를 작업함
+ 3. if(zero[i] > one[j]) 일 경우 탐색을 종료하고 i++를 진행 함 (반복문). ( 각 배열의 값은 입력 배열의 인덱스를 저장하고 있다. )
+
+
+# 두번 째 방법
+ 첫번째 방법은 2중 for문이 들어가기 때문에 개선이 필요함
+ `P < Q 해결하기`
+ 1. 한 쌍의 기준을 (P,Q)로 정한다
+ 1. P는 값이 0인 입력 배열의 인덱스
+ 2. Q는 값이 1인 입력 배열의 인덱스
+ 2. Q의 개수를 n개로 정한다.
+ 1. 현재 P의 인덱스보다 작은 Q값을 다 빼야 된다. ( P < Q 조건 때문 ) --> n = n-1
+
+## 소스코드
+
+~~~java
+ public int solution(int[] A) {
+ // write your code in Java SE 8
+ return this.test(A);
+ }
+
+ public int test(int[] a){
+ int zeroCnt = 0;
+ int oneCnt = 0;
+ int total = 0;
+ for(int i=0; i1000000000){
+ return -1;
+ }
+ if(a[i]==0){
+ total += oneCnt;
+ }else{
+ oneCnt--;
+ }
+ }
+// System.out.println(total);
+ return total;
+ }
+~~~
+
+## 개선사항
+
+## 시간복잡도를 주링기 위해 생각한 점, 반영한 점
+
+## 채점 결과
+| Task Score | Correctness | Performance |
+| ------------ | ------------- | ------------- |
+| 100% | 100% | 100% |
diff --git a/hojin/Algorithm/codility/lesson06/Distinct.md b/hojin/Algorithm/codility/lesson06/Distinct.md
new file mode 100644
index 0000000..f45227f
--- /dev/null
+++ b/hojin/Algorithm/codility/lesson06/Distinct.md
@@ -0,0 +1,63 @@
+- [Distinct](https://app.codility.com/programmers/lessons/6-sorting/distinct/)
+
+## 접근 방법
+# 첫번 째 방법
+ 1. 입력 배열값 중 값이 0인 인덱스를 값으로 저장되는 배열을 만든다 int zero[]
+ 2. 입력 배열값 중 값이 1인 인덱스를 값으로 저장되는 배열을 만든다 int one[]
+ 3. 이슈사항
+ 1. (P,Q)를 쌍으로 지정할 때 P < Q라는 조건이 있다
+ 2. 이를 해결하기 위해서 (1),(2)를 작업함
+ 3. if(zero[i] > one[j]) 일 경우 탐색을 종료하고 i++를 진행 함 (반복문). ( 각 배열의 값은 입력 배열의 인덱스를 저장하고 있다. )
+
+
+# 두번 째 방법
+ 첫번째 방법은 2중 for문이 들어가기 때문에 개선이 필요함
+ `P < Q 해결하기`
+ 1. 한 쌍의 기준을 (P,Q)로 정한다
+ 1. P는 값이 0인 입력 배열의 인덱스
+ 2. Q는 값이 1인 입력 배열의 인덱스
+ 2. Q의 개수를 n개로 정한다.
+ 1. 현재 P의 인덱스보다 작은 Q값을 다 빼야 된다. ( P < Q 조건 때문 ) --> n = n-1
+
+## 소스코드
+
+~~~java
+ public int solution(int[] A) {
+ // write your code in Java SE 8
+ return this.test(A);
+ }
+
+ public int test(int[] a){
+ int zeroCnt = 0;
+ int oneCnt = 0;
+ int total = 0;
+ for(int i=0; i1000000000){
+ return -1;
+ }
+ if(a[i]==0){
+ total += oneCnt;
+ }else{
+ oneCnt--;
+ }
+ }
+// System.out.println(total);
+ return total;
+ }
+~~~
+
+## 개선사항
+
+## 시간복잡도를 주링기 위해 생각한 점, 반영한 점
+
+## 채점 결과
+| Task Score | Correctness | Performance |
+| ------------ | ------------- | ------------- |
+| 100% | 100% | 100% |
diff --git a/hojin/Algorithm/codility/lesson06/GenomicRangeQuery.md b/hojin/Algorithm/codility/lesson06/GenomicRangeQuery.md
new file mode 100644
index 0000000..3bb3302
--- /dev/null
+++ b/hojin/Algorithm/codility/lesson06/GenomicRangeQuery.md
@@ -0,0 +1,63 @@
+- [GenomicRangeQuery](https://app.codility.com/programmers/lessons/5-prefix_sums/genomic_range_query/)
+
+## 접근 방법
+
+
+# 첫번 째 방법
+ 1. 비교를 쉽게 하기 위해서 String[]을 int[]로 변환 한다.
+ 2. 변환시 for문을 최대한 적게 돌기 위하여 탐색에 필요한 부분만 변환한다.
+ 3. p값과 q값에서 최소 값을 찾는다.
+# 두번 째 방법
+
+## 소스코드
+
+~~~java
+public int[] solution(String s, int[] p, int[] q){
+ int intS[] = new int[s.length()];
+ int result[] = new int[p.length];
+
+ for(int i=0;i parserInt){
+ min = parserInt;
+ if(parserInt == 1){
+ return 1;
+ }
+ }
+ }
+ return min;
+ }
+~~~
+
+## 개선필요한 사항
+ 1. String[] ->int[] parser를 미리 하는게 좋을 것 같다. ( 중복되서 parser를 하는 듯 하다. )
+ 2. 시간복잡도가 N*M이므로 줄여야 된다.
+
+
+## 시간복잡도를 주링기 위해 생각한 점, 반영한 점
+ 1. 탐색해야되는 길이(M)만큼 for문을 돌면 안되고, 바로 값을 알 수 있는 연산이 필요하다. 즉, 2~4라고 가정했을 때 탐색없이 답을 찾아야 한다.
+
+## 채점 결과
+| Task Score | Correctness | Performance |
+| ------------ | ------------- | ------------- |
+| 62% | 100% | 0% |
diff --git a/hojin/Algorithm/codility/lesson06/Triangle.md b/hojin/Algorithm/codility/lesson06/Triangle.md
new file mode 100644
index 0000000..db3f4c1
--- /dev/null
+++ b/hojin/Algorithm/codility/lesson06/Triangle.md
@@ -0,0 +1,34 @@
+- [Triangle](https://app.codility.com/programmers/lessons/6-sorting/triangle/)
+
+## 접근 방법
+ 1. 정렬이 된 상태면 아래 조건을 항상 만족 함
+ 1. Q + R > P
+ 2. P + R > Q
+ 2. 그래서 추가적으로 P + Q > R 조건만 확인 하면 됨
+ 3. long 형변환 이유는 Max int value일 경우 연산을 위하여 처리 함
+
+## 소스코드
+
+~~~java
+public int solution(int[] a) {
+ Arrays.sort(a);
+ if(a.length >100000){
+ return 0;
+ }
+ for (int i = 0; i < a.length - 2; i++) {
+ if ((long)a[i] + (long)a[i + 1] > (long)a[i + 2]) {
+ return 1;
+ }
+ }
+ return 0;
+ }
+~~~
+
+## 개선사항
+
+## 시간복잡도를 주링기 위해 생각한 점, 반영한 점
+
+## 채점 결과
+| Task Score | Correctness | Performance |
+| ------------ | ------------- | ------------- |
+| 100% | 100% | 100% |
diff --git a/hojin/Algorithm/codility/lesson07/Brackets.md b/hojin/Algorithm/codility/lesson07/Brackets.md
new file mode 100644
index 0000000..40153d3
--- /dev/null
+++ b/hojin/Algorithm/codility/lesson07/Brackets.md
@@ -0,0 +1,74 @@
+- [Brackets](https://app.codility.com/programmers/lessons/7-stacks_and_queues/brackets/)
+
+## 접근 방법
+
+
+# 첫번 째 방법
+ 1. 아스키코드값으로는 규칙이 안보여서 임의로 규칙을 생성한다.
+ 2. 같은 쌍 (ex: ']', '[')은 서로 값이 1차이 나도록 한다.
+ 3. 최근에 열린 괄호를 저장해두는 배열을 만든다.(openArray[])
+ 4. 닫는 기호 " ']','}',')' "가 나왔을 경우 본인의 짝이 나온 값을 -1을 해준다.
+ 5. 최근의 연 기호가 본인의 짝인지 확인 한다.
+
+## 소스코드
+
+~~~java
+public int solution(String s) {
+ int[] cntArray = new int[6];
+ int index = 0;
+ char[] c = s.toCharArray();
+ int[] openArray = new int[c.length];
+ int charCnt=0;
+ int recentIndex = 0;
+ int openIndex = 0;
+ for(int i=0; i< c.length ;i++ ){
+ index = this.changeCharToTempInt(c[i]);
+ if(c[i] == '}' || c[i] == ']' || c[i] == ')'){
+ //짝궁의 값을 -1 시킨다.
+ index--;
+ cntArray[index] += -1;
+ charCnt--;
+ if(cntArray[index] < 0){
+ return 0;
+ }
+ //최근의 연 기호가 본인의 짝인지 확인한다.
+ openIndex--;
+ if(openArray[openIndex] == index){
+ }else{
+ //짝궁이 아니다
+ return 0;
+ }
+ }else{
+ cntArray[index] += 1;
+ charCnt++;
+ openArray[openIndex++] = index;
+ }
+ }
+ if(charCnt == 0) return 1;
+ return 0;
+ }
+
+ public int changeCharToTempInt(char c){
+ switch(c){
+ case '{' : return 0;
+ case '}' : return 1;
+ case '[' : return 2;
+ case ']' : return 3;
+ case '(' : return 4;
+ case ')' : return 5;
+ default : new Exception(); return -1;
+ }
+ }
+~~~
+
+## 개선필요한 사항
+ 1. 웬지 짝궁의 값을 -1시키는 부분은 필요가 없어보이는 듯 하다.
+
+
+## 시간복잡도를 주링기 위해 생각한 점, 반영한 점
+
+
+## 채점 결과
+| Task Score | Correctness | Performance |
+| ------------ | ------------- | ------------- |
+| 100% | 100% | 100% |
diff --git a/hojin/Algorithm/codility/lesson07/Fish.md b/hojin/Algorithm/codility/lesson07/Fish.md
new file mode 100644
index 0000000..ce26feb
--- /dev/null
+++ b/hojin/Algorithm/codility/lesson07/Fish.md
@@ -0,0 +1,55 @@
+- [Fish](https://app.codility.com/programmers/lessons/7-stacks_and_queues/fish/)
+
+## 접근 방법
+ - 0번째 물고기가 1번째 물고기보다 상류에 존재한다.
+ - 0은 상류 1은 하류를 의미한다.
+ - 기준 물고기를 정하자 ( 기준 물고기 : 다음 물고기랑 만날 물고기 )
+ - 내려가는 물고기가 나올때까지 탐색을 한다
+ - 내려가는 물고기를 만나면 이 물고기가 기준 물고기가 된다.
+ - 기준 물고기랑 다음 물고기를 비교한다.
+ - 같은 방향일 경우 기준 물고기가 다음 물고기로 변경된다.
+ - 다른 방향일 경우 한명이 잡혀 먹힌다. (올라가는 물고기)
+ 1. 잡아먹었을 경우 : 기준 물고기가 고정
+ 2. 잡혀먹혔을 경우 : 기준 물고기는 사라진다.
+ - 다시 내려가는 물고기를 찾는다.
+ - 찾으면 기준물고기로정하고 위 로직을 반복한다.
+
+## 소스코드
+
+~~~java
+public int solution(int[] a, int[] b) {
+ int liveCnt=0;
+ int nowFish = 0;
+ int nextFish = 0;
+ int fixFish = 0;
+ for(int i=0; i nowFish){
+ fixFish = nextFish;
+ }else{
+ fixFish = nowFish;
+ }
+ }else{
+ liveCnt++;
+ }
+ }else{
+
+ }
+
+ }
+ return 0;
+ }
+~~~
+
+## 개선사항
+ 1. 아직 문제를 정확하게 이해 하지 못했다.
+
+## 시간복잡도를 주링기 위해 생각한 점, 반영한 점
+
+## 채점 결과
+| Task Score | Correctness | Performance |
+| ------------ | ------------- | ------------- |
+| 0% | 0% | 0% |
diff --git a/hojin/Algorithm/codility/lesson07/Nesting.md b/hojin/Algorithm/codility/lesson07/Nesting.md
new file mode 100644
index 0000000..15f35a9
--- /dev/null
+++ b/hojin/Algorithm/codility/lesson07/Nesting.md
@@ -0,0 +1,47 @@
+- [Nesting](https://app.codility.com/programmers/lessons/7-stacks_and_queues/nesting/)
+
+## 접근 방법
+# 첫번 째 방법
+ 1. 열리는 괄호를 leftCnt로 체크
+ 2. 닫히는 괄호를 rightCnt로 체크
+ 3. 닫히는 괄호는 항상 열리는 괄호보다 작아야 한다.
+ 4. if문이 끝났을 때 열리는 괄호랑 닫히는 괄호 크기를 확인한다.
+
+
+
+## 소스코드
+
+~~~java
+ public int solution(String s) {
+ int leftCnt = 0;
+ int rigthCnt = 0;
+ char c[] = s.toCharArray();
+ for(int i=0; i100){
+ return "";
+ }
+ if(str.length()==2){
+ return str;
+ }
+
+ char[] charArray = str.toCharArray();
+ char[] resultChar = str.toCharArray();
+ for(int i=2; i= 97 &&
+ (int)charArray[i] <=122){
+ //소문자다
+ //대문자로 변경
+ resultChar[i] = (char) ((char)((int)charArray[i])-(32));
+ }else{
+ //느낌표로 변경
+ resultChar[i] = '!';
+ }
+ }
+ return String.valueOf(resultChar);
+ }
+}
diff --git a/hojin/Algorithm/oncoder/Three.java b/hojin/Algorithm/oncoder/Three.java
new file mode 100644
index 0000000..7f800e7
--- /dev/null
+++ b/hojin/Algorithm/oncoder/Three.java
@@ -0,0 +1,76 @@
+package oncoder;
+
+public class Three {
+ public static void main(String[] args) {
+
+ }
+ public String encoder(String message){
+ char[] messageChar = message.toCharArray();
+ int[] encoder = new int[message.length()];
+ String binaryStr = "";
+ String total = "";
+ for(int i=0; i 0){
+ retrunStr += "0";
+ zeroCnt--;
+ }
+ return str+retrunStr;
+ }
+ public String parserBinaryTo6bit(String binaryStr){
+ if(binaryStr.length()>1){
+ if(binaryStr.indexOf("0")==0){
+ binaryStr = binaryStr.substring(1,binaryStr.length());
+ }
+ }
+ int zeroCnt = 6-binaryStr.length();
+ String retrunStr = "";
+ while(zeroCnt > 0){
+ retrunStr += "0";
+ zeroCnt--;
+ }
+ return retrunStr+binaryStr;
+ }
+
+ public int parserCharToInt(char val){
+ int checkVal = val;
+ if(checkVal >= 97 && checkVal <=122){
+ return checkVal-97;
+ }else if(checkVal >= 65 && checkVal <=90){
+ return checkVal-39;
+ }else if(checkVal >= 48 && checkVal <=57){
+ return checkVal+4;
+ }else{
+ return 62;
+ }
+ }
+}
diff --git a/hojin/Algorithm/oncoder/Two.java b/hojin/Algorithm/oncoder/Two.java
new file mode 100644
index 0000000..02f914c
--- /dev/null
+++ b/hojin/Algorithm/oncoder/Two.java
@@ -0,0 +1,128 @@
+package oncoder;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import javax.xml.bind.ValidationEvent;
+
+public class Two {
+
+ static public void main(String[] args) {
+// new Two().getHashM(1007,3);
+ System.out.println(new Two().getHashM(88445,10));
+ }
+
+ public int getHashM(int maxK, int collision) {
+ int l = maxK / collision;
+ if(l<2){
+ return 2;
+ }
+ int n = 0;
+ int xn = 0;
+ boolean flag = false;
+ while(true){
+ if(this.getN(l, Math.pow(2, n),Math.pow(2, n+1))){
+ flag = true;
+ }
+ if(flag){
+ if(this.getN(l, Math.pow(2, n+1),Math.pow(2, n+2))){
+ flag = false;
+ }else{
+ xn = n;
+ break;
+ }
+ }
+ n++;
+ }
+ //소수 찾기
+ int middel = (int)((Math.pow(2, n) + Math.pow(2, n+1))/2);
+ int cnt=0;
+ int min = 10000;
+ int val = 0;
+ List valList = new ArrayList();
+ valList.add(2);
+ for(int i=(int)Math.pow(2, n); i<(int)Math.pow(2, n+1) ; i++){
+ for(int j=0;j Math.abs( middel-i)){
+ min = Math.abs( middel-i);
+ val = i;
+ }
+ }
+ cnt=0;
+ }
+ for(int temp:valList){
+ if(min > Math.abs( middel-temp)){
+ min = Math.abs( middel-temp);
+ val = temp;
+ }
+ }
+ return val;
+ }
+
+ public boolean getN(int key, double d, double e){
+ if(d <= key && key <= e){
+ return true;
+ }
+ return false;
+ }
+// public int getHashM(int maxK, int collision) {
+// int l = maxK / collision;
+// if(l<2){
+// return 2;
+// }
+// int n = 0;
+// int xn = 0;
+// boolean flag = false;
+// while(true){
+// if(this.getN(l, Math.pow(2, n),Math.pow(2, n+1))){
+// flag = true;
+// }
+// if(flag){
+// if(this.getN(l, Math.pow(2, n+1),Math.pow(2, n+2))){
+// flag = false;
+// }else{
+// xn = n;
+// break;
+// }
+// }
+// n++;
+// }
+// //소인수 찾기
+// int middel = (int)((Math.pow(2, n) + Math.pow(2, n+1))/2);
+// int cnt=0;
+// int min = 10000;
+// int val = 0;
+// for(int i=(int)Math.pow(2, n); i<(int)Math.pow(2, n+1) ; i++){
+// for(int j=2;j Math.abs( middel-i)){
+// min = Math.abs( middel-i);
+// val = i;
+// }
+// }
+// cnt=0;
+// }
+// return val;
+// }
+//
+// public boolean getN(int key, double d, double e){
+// if(d <= key && key <= e){
+// return true;
+// }
+// return false;
+// }
+
+}