diff --git "a/Algorithm/SAMSUNG Software PRO\353\223\261\352\270\211 \354\244\200\353\271\204.md" "b/Algorithm/SAMSUNG Software PRO\353\223\261\352\270\211 \354\244\200\353\271\204.md"
new file mode 100644
index 00000000..b54846ef
--- /dev/null
+++ "b/Algorithm/SAMSUNG Software PRO\353\223\261\352\270\211 \354\244\200\353\271\204.md"
@@ -0,0 +1,187 @@
+## SAMSUNG Software PRO등급 준비
+
+작성 : 2020.08.10.
+
+
+
+#### 역량 테스트 단계
+
+---
+
+- *Advanced*
+
+- #### *Professional*
+
+- *Expert*
+
+
+
+**시험 시간 및 문제 수** : 4시간 1문제
+
+Professional 단계부터는 라이브러리를 사용할 수 없다.
+
+> C/Cpp 경우, 동적할당 라이브러리인 `malloc.h`까지만 허용
+
+
+
+또한 전체적인 로직은 구현이 되어있는 상태이며, 사용자가 필수적으로 구현해야 할 메소드 부분이 빈칸으로 제공된다. (`main.cpp`와 `user.cpp`가 주어지며, 우리는 `user.cpp`를 구현하면 된다)
+
+
+
+크게 두 가지 유형으로 출제되고 있다.
+
+1. **실행 시간을 최대한 감소**시켜 문제를 해결하라
+2. **쿼리 함수를 최소한 실행**시켜 문제를 해결하라
+
+결국, 최대한 **효율적인 코드를 작성하여 시간, 메모리를 절약하는 것**이 Professinal 등급의 핵심이다.
+
+
+
+Professional 등급 문제를 해결하기 위해 필수적으로 알아야 할 것(직접 구현할 수 있어야하는) 들
+
+##### [박트리님 블로그 참고 - '역량테스트 B형 공부법'](https://baactree.tistory.com/53)
+
+- 큐, 스택
+- 정렬
+- 힙
+- 해싱
+- 연결리스트
+- 트리
+- 메모이제이션
+- 비트마스킹
+- 이분탐색
+- 분할정복
+
+추가 : 트라이, LCA, BST, 세그먼트 트리 등
+
+
+
+## 문제 풀기 연습
+
+> 60분 - 설계
+>
+> 120분 - 구현
+>
+> 60분 - 디버깅 및 최적화
+
+
+
+### 설계
+
+---
+
+1. #### 문제 빠르게 이해하기
+
+ 시험 문제는 상세한 예제를 통해 충분히 이해할 수 있도록 제공된다. 따라서 우선 읽으면서 전체적으로 어떤 문제인지 **전체적인 틀을 파악**하자
+
+
+
+2. #### 구현해야 할 함수 확인하기
+
+ 문제에 사용자가 구현해야 할 함수가 제공된다. 특히 필요한 파라미터와 리턴 타입을 알려주므로, 어떤 방식으로 인풋과 아웃풋이 이뤄질 지 함수를 통해 파악하자
+
+
+
+3. #### 제약 조건 확인하기
+
+ 문제의 전체적인 곳에서, 범위 값이 작성되어 있을 것이다. 또한 문제의 마지막에는 제약 조건이 있다. 이 조건들은 문제를 풀 때 핵심이 되는 부분이다. 반드시 체크를 해두고, 설계 시 하나라도 빼먹지 않도록 주의하자
+
+
+
+4. #### 해결 방법 고민하기
+
+ 문제 이해와 구현 함수 파악이 끝났다면, 어떤 방식으로 해결할 것인지 작성해보자.
+
+ 전체적인 프로세스를 전개하고, 이때 필요한 자료구조, 구조체 등 설계의 큰 틀부터 그려나간다.
+
+ 최대값으로 문제에 주어졌을 때 필요한 사이즈가 얼마인 지, 어떤 타입의 변수들을 갖추고 있어야 하는 지부터 해시나 연결리스트를 사용할 자료구조에 대해 미리 파악 후 작성해두도록 한다.
+
+
+
+5. #### 수도 코드 작성하기
+
+ 각 프로세스 별로, 필요한 로직에 대해 간단히 수도 코드를 작성해두자. 특히 제약 조건이나 놓치기 쉬운 것들은 미리 체크해두고, 작성해두면 구현으로 옮길 때 실수를 줄일 수 있다.
+
+
+
+##### *만약 설계 중 도저히 흐름이 이해가 안간다면?*
+
+> 높은 확률로 main.cpp에서 답을 찾을 수 있다. 문제 이해가 잘 되지 않을 때는, main.cpp와 user.cpp 사이에 어떻게 연결되는 지 main.cpp 코드를 뜯어보고 이해해보자.
+
+
+
+### 구현
+
+---
+
+1. #### 설계한 프로세스를 주석으로 옮기기
+
+ 내가 해결할 방향에 대해 먼저 코드 안에 주석으로 핵심만 담아둔다. 이 주석을 보고 필요한 부분을 구현해나가면 설계를 완벽히 옮기는 데 큰 도움이 된다.
+
+
+
+2. #### 먼저 전역에 필요한 부분 작성하기
+
+ 소스 코드 내 전체적으로 활용될 구조체 및 전역 변수들에 대한 부분부터 구현을 시작한다. 이때 `#define`와 같은 전처리기를 적극 활용하여 선언에 필요한 값들을 미리 지정해두자
+
+
+
+3. #### Check 함수들의 동작 여부 확인하기
+
+ 문자열 복사, 비교 등 모두 직접 구현해야 하므로, 혹시 실수를 대비하여 함수를 만들었을 때 제대로 동작하는 지 체크하자. 이때 실수한 걸 넘어가면, 디버깅 때 찾기 위해서 엄청난 고생을 할 수도 있다.
+
+
+
+4. #### 다시 한번 제약조건 확인하기
+
+ 결국 디버깅에서 문제가 되는 건 제약 조건을 제대로 지키지 않았을 경우가 다반사다. 코드 내에서 제약 조건을 모두 체크하여 잘 구현했는 지 확인해보자
+
+
+
+### 디버깅 및 최적화
+
+---
+
+1. #### input 데이터 활용하기
+
+ input 데이터가 text 파일로 주어진다. 물론 방대한 데이터의 양이라 디버깅을 하려면 매우 까다롭다. 보통 1~2번 테스트케이스는 작은 데이터 값이므로, 이 값들을 활용해 문제점을 찾아낼 수도 있다.
+
+
+
+2. #### main.cpp를 디버깅에 활용하기
+
+ 문제가 발생했을 때, main.cpp를 활용하여 디버깅을 할 수도 있다. 문제가 될만한 부분에 출력값을 찍어보면서 도움이 될만한 부분을 찾아보자. 문제에 따라 다르겠지만, 생각보다 main.cpp 안의 코드에서 중요한 정보들을 깨달을 수도 있다.
+
+
+
+3. #### init 함수 고민하기
+
+ 어쩌면 가장 중요한 함수이기도 하다. 이 초기화 함수를 얼마나 효율적으로 구현하느냐에 따라 합격 유무가 달라진다. 최대한 매 테스트케이스마다 초기화하는 변수들이나 공간을 줄여야 실행 시간을 줄일 수 있다. 따라서 인덱스를 잘 관리하여 init 함수를 잘 짜보는 연습을 해보자
+
+
+
+4. #### 실행 시간 감소 고민하기
+
+ 이 밖에도 실행 시간을 줄이기 위한 고민을 끝까지 해야하는 것이 중요하다. 문제를 accept 했다고 해서 합격을 하는 시험이 아니다. 다른 지원자들보다 효율적이고 빠른 시간으로 문제를 풀어야 pass할 수 있다. 내가 작성한 자료구조보다 더 빠른 해결 방법이 생각났다면, 수정 과정을 거쳐보기도 하고, 많이 활용되는 변수에는 register를 적용하는 등 최대한 실행 시간을 감소시킬 수 있는 방안을 생각하여 적용하는 시도를 해야한다.
+
+
+
+
+
+## 시험 대비
+
+1. #### 비슷한 문제 풀어보기
+
+ 임직원들만 이용할 수 있는 사내 SWEA 사이트에서 기출과 유사한 유형의 문제들을 제공해준다. 특히 시험 환경과 똑같이 이뤄지기 때문에 연습해보기 좋다. 많은 문제들을 풀어보면서 유형에 익숙해지는 것이 가장 중요할 것 같다.
+
+
+
+2. #### 다른 사람 코드로 배우기
+
+ 이게 개인적으로 핵심인 것 같다. 1번에서 말한 사이트에서 기출 유형 문제들을 해결한 사람들의 코드를 볼 수 있도록 제공되어 있다. 특히 해결된 코드의 실행 시간이나 사용 메모리도 볼 수 있다는 점이 좋다. 따라서 문제 해결에 어려움이 있거나, 더 나은 코드를 배우기 위해 적극적으로 활용해야 한다.
+
+
+
+
+
+올해 안에 꼭 합격하자!
\ No newline at end of file
diff --git "a/Algorithm/SW \354\227\255\353\237\211\355\205\214\354\212\244\355\212\270 B\355\230\225 \354\244\200\353\271\204/190916 - 1\354\235\274\354\260\250/README.md" "b/Algorithm/SW \354\227\255\353\237\211\355\205\214\354\212\244\355\212\270 B\355\230\225 \354\244\200\353\271\204/190916 - 1\354\235\274\354\260\250/README.md"
deleted file mode 100644
index ab0ff382..00000000
--- "a/Algorithm/SW \354\227\255\353\237\211\355\205\214\354\212\244\355\212\270 B\355\230\225 \354\244\200\353\271\204/190916 - 1\354\235\274\354\260\250/README.md"
+++ /dev/null
@@ -1,6 +0,0 @@
-## Professional Course 2일차 문제
-
-
-
-- 롤러코스터
-
diff --git "a/Algorithm/SW \354\227\255\353\237\211\355\205\214\354\212\244\355\212\270 B\355\230\225 \354\244\200\353\271\204/190916 - 1\354\235\274\354\260\250/\353\241\244\353\237\254\354\275\224\354\212\244\355\204\260.java" "b/Algorithm/SW \354\227\255\353\237\211\355\205\214\354\212\244\355\212\270 B\355\230\225 \354\244\200\353\271\204/190916 - 1\354\235\274\354\260\250/\353\241\244\353\237\254\354\275\224\354\212\244\355\204\260.java"
deleted file mode 100644
index fbd7f40a..00000000
--- "a/Algorithm/SW \354\227\255\353\237\211\355\205\214\354\212\244\355\212\270 B\355\230\225 \354\244\200\353\271\204/190916 - 1\354\235\274\354\260\250/\353\241\244\353\237\254\354\275\224\354\212\244\355\204\260.java"
+++ /dev/null
@@ -1,92 +0,0 @@
-import java.io.BufferedReader;
-import java.io.InputStreamReader;
-import java.util.StringTokenizer;
-
-public class 롤러코스터 {
-
- static final int k = 1000000007;
-
- static class Rail {
- int a;
- int b;
-
- Rail(int a, int b) {
- this.a = a;
- this.b = b;
- }
- }
-
- static int N;
- static Rail[] rails;
-
- public static void quickSort(Rail[] arr, int start, int end) {
-
- if (start >= end)
- return;
-
- if (start < end) {
-
- int i = start - 1;
- int j = end + 1;
- Rail pivot = arr[(start + end) / 2];
-
- while (true) {
-
- while (
- ((double)(arr[++i].a-1)/(double)arr[i].b > (double)(pivot.a-1)/(double)pivot.b)
- ) {
- }
- while (
- ((double)(arr[--j].a-1)/(double)arr[j].b < (double)(pivot.a-1)/(double)pivot.b)
- ) {
- }
-
- if (i >= j)
- break;
-
- Rail temp = arr[i];
- arr[i] = arr[j];
- arr[j] = temp;
- }
-
- quickSort(arr, start, i - 1);
- quickSort(arr, j + 1, end);
- }
-
- }
-
- public static void main(String[] args) throws Exception {
-
- BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
-
- int testcase = Integer.parseInt(br.readLine());
-
- for (int t = 1; t <= testcase; t++) {
-
- N = Integer.parseInt(br.readLine());
- rails = new Rail[N];
- long result = 0;
- long v = 1;
-
- for (int i = 0; i < N; i++) {
-
- StringTokenizer st = new StringTokenizer(br.readLine(), " ");
- rails[i] = new Rail(Integer.parseInt(st.nextToken()), Integer.parseInt(st.nextToken()));
- }
-
- quickSort(rails, 0, N-1);
-
- for (int i = 0; i < rails.length; i++) {
- int a = rails[i].a;
- int b = rails[i].b;
-
- result = ((v*a)%k+b)%k;
- v = result;
- }
-
- System.out.println("#" + t + " " + result);
- }
-
- }
-
-}
diff --git "a/Algorithm/SW \354\227\255\353\237\211\355\205\214\354\212\244\355\212\270 B\355\230\225 \354\244\200\353\271\204/190917 - 2\354\235\274\354\260\250/README.md" "b/Algorithm/SW \354\227\255\353\237\211\355\205\214\354\212\244\355\212\270 B\355\230\225 \354\244\200\353\271\204/190917 - 2\354\235\274\354\260\250/README.md"
deleted file mode 100644
index 84c7b65a..00000000
--- "a/Algorithm/SW \354\227\255\353\237\211\355\205\214\354\212\244\355\212\270 B\355\230\225 \354\244\200\353\271\204/190917 - 2\354\235\274\354\260\250/README.md"
+++ /dev/null
@@ -1,7 +0,0 @@
-## Professional Course 1일차 문제
-
-
-
-- 평등주의
-- 그래도 수명이 절반이 되어서는....
-
diff --git "a/Algorithm/SW \354\227\255\353\237\211\355\205\214\354\212\244\355\212\270 B\355\230\225 \354\244\200\353\271\204/190918 - 3\354\235\274\354\260\250/README.md" "b/Algorithm/SW \354\227\255\353\237\211\355\205\214\354\212\244\355\212\270 B\355\230\225 \354\244\200\353\271\204/190918 - 3\354\235\274\354\260\250/README.md"
deleted file mode 100644
index 64f2eda7..00000000
--- "a/Algorithm/SW \354\227\255\353\237\211\355\205\214\354\212\244\355\212\270 B\355\230\225 \354\244\200\353\271\204/190918 - 3\354\235\274\354\260\250/README.md"
+++ /dev/null
@@ -1,7 +0,0 @@
-## Professional Course 6일차 문제
-
-
-
-- 단어가 등장하는 횟수
-- 두 번 이상 등장하는 문자열
-
diff --git "a/Algorithm/SW \354\227\255\353\237\211\355\205\214\354\212\244\355\212\270 B\355\230\225 \354\244\200\353\271\204/190919 - 4\354\235\274\354\260\250/README.md" "b/Algorithm/SW \354\227\255\353\237\211\355\205\214\354\212\244\355\212\270 B\355\230\225 \354\244\200\353\271\204/190919 - 4\354\235\274\354\260\250/README.md"
deleted file mode 100644
index 43f96b3d..00000000
--- "a/Algorithm/SW \354\227\255\353\237\211\355\205\214\354\212\244\355\212\270 B\355\230\225 \354\244\200\353\271\204/190919 - 4\354\235\274\354\260\250/README.md"
+++ /dev/null
@@ -1,8 +0,0 @@
-## Professional Course
-
-
-
-- 3강 이산수학
- - 파이의 합
-- 4강 Counting & Probability
- - Inversion Counting
diff --git "a/Algorithm/SW \354\227\255\353\237\211\355\205\214\354\212\244\355\212\270 B\355\230\225 \354\244\200\353\271\204/190920 - 5\354\235\274\354\260\250/README.md" "b/Algorithm/SW \354\227\255\353\237\211\355\205\214\354\212\244\355\212\270 B\355\230\225 \354\244\200\353\271\204/190920 - 5\354\235\274\354\260\250/README.md"
deleted file mode 100644
index 4b008d2a..00000000
--- "a/Algorithm/SW \354\227\255\353\237\211\355\205\214\354\212\244\355\212\270 B\355\230\225 \354\244\200\353\271\204/190920 - 5\354\235\274\354\260\250/README.md"
+++ /dev/null
@@ -1,8 +0,0 @@
-## Professional Course
-
-
-
-- 5강 Graph
- - 간담회 참석
-- 7강 계산기하학
- - Closest
diff --git "a/Algorithm/SW \354\227\255\353\237\211\355\205\214\354\212\244\355\212\270 B\355\230\225 \354\244\200\353\271\204/code/Solution.java" "b/Algorithm/SW \354\227\255\353\237\211\355\205\214\354\212\244\355\212\270 B\355\230\225 \354\244\200\353\271\204/code/Solution.java"
deleted file mode 100644
index 90d63092..00000000
--- "a/Algorithm/SW \354\227\255\353\237\211\355\205\214\354\212\244\355\212\270 B\355\230\225 \354\244\200\353\271\204/code/Solution.java"
+++ /dev/null
@@ -1,729 +0,0 @@
-package B형준비;
-
-class UserSolution {
-
- static final int hash_size = 1000;
- static final int hash_leng = 200;
- static final int hash_val = 257;
-
- // HashKey Method
- static int getHashKey(String name) {
- int key = 0;
-
- for (int i = 0; i < name.length(); i++) {
- key = (key*hash_val) + name.charAt(i);
- }
-
- if(key < 0) key = -key;
-
- return key % hash_size;
- }
-
- static int[][][] hash_table = new int[5][hash_size][hash_leng];
-
- static String[] hash_name = new String[50001];
- static String[] hash_num = new String[50001];
- static String[] hash_birth = new String[50001];
- static String[] hash_email = new String[50001];
- static String[] hash_memo = new String[50001];
-
- static int index = 1; // 레코드 인덱스
- static int[][] cnt = new int[5][hash_size];
- static boolean[] visited = new boolean[50001];
-
- void InitDB()
- {
- for (int i = 0; i < 5; i++) {
- for (int j = 0; j < hash_size; j++) {
- cnt[i][j] = 0;
- }
- }
- index = 1; // 인덱스 초기화
- }
-
- boolean isEquals(String origin, String compare) {
-
- if(origin.length() != compare.length()) return false;
-
- for (int i = 0; i < origin.length(); i++) {
- if(origin.charAt(i) != compare.charAt(i)) {
- return false;
- }
- }
-
- return true;
- }
-
- void changeVal(int number, int key, int index) {
- hash_table[number][key][cnt[number][key]++] = index;
- }
-
- void Add(String name, String number, String birthday, String email, String memo)
- {
- int key = getHashKey(name);
- hash_table[0][key][cnt[0][key]++] = index;
-
- key = getHashKey(number);
- hash_table[1][key][cnt[1][key]++] = index;
-
- key = getHashKey(birthday);
- hash_table[2][key][cnt[2][key]++] = index;
-
- key = getHashKey(email);
- hash_table[3][key][cnt[3][key]++] = index;
-
- key = getHashKey(memo);
- hash_table[4][key][cnt[4][key]++] = index;
-
- hash_name[index] = name;
- hash_num[index] = number;
- hash_birth[index] = birthday;
- hash_email[index] = email;
- hash_memo[index] = memo;
-
- visited[index] = false; // 방문 초기화
- index++;
- }
-
- int Delete(int field, String str)
- {
- int count = 0;
- int key = 0;
-
- switch (field) {
- case 0: // name
- key = getHashKey(str);
- for (int i = 0; i < cnt[0][key]; i++) {
- int index = hash_table[0][key][i];
- if(index==0) continue;
- if(isEquals(hash_name[index], str) && !visited[index]) {
- visited[index] = true;
- count++;
- }
- }
- break;
- case 1: // number
- key = getHashKey(str);
- for (int i = 0; i < cnt[1][key]; i++) {
- int index = hash_table[1][key][i];
- if(index==0) continue;
- if(isEquals(hash_num[index], str) && !visited[index]) {
- visited[index] = true;
- count++;
- }
- }
- break;
- case 2: // birthday
- key = getHashKey(str);
- for (int i = 0; i < cnt[2][key]; i++) {
- int index = hash_table[2][key][i];
- if(index==0) continue;
- if(isEquals(hash_birth[index], str) && !visited[index]) {
- visited[index] = true;
- count++;
- }
- }
- break;
- case 3: // email
- key = getHashKey(str);
- for (int i = 0; i < cnt[3][key]; i++) {
- int index = hash_table[3][key][i];
- if(index==0) continue;
- if(isEquals(hash_email[index], str) && !visited[index]) {
- visited[index] = true;
- count++;
- }
- }
- break;
- case 4: // memo
- key = getHashKey(str);
- for (int i = 0; i < cnt[4][key]; i++) {
- int index = hash_table[4][key][i];
- if(index==0) continue;
- if(isEquals(hash_memo[index], str) && !visited[index]) {
- visited[index] = true;
- count++;
- }
- }
- break;
-
- default:
- break;
- }
- return count;
- }
-
- int Change(int field, String str, int changefield, String changestr)
- {
- int count = 0;
- int key = 0;
- String origin = "";
- int originKey = 0;
-
- switch (field) {
- case 0: // name
- key = getHashKey(str);
- for (int i = 0; i < cnt[0][key]; i++) {
- int index = hash_table[0][key][i];
- if(index == 0) continue;
- if(isEquals(hash_name[index], str) && !visited[index]) {
- switch (changefield) {
- case 0:
- origin = hash_name[index];
- originKey = getHashKey(origin);
- for (int j = 0; j < cnt[0][originKey]; j++) {
- if(hash_table[0][originKey][j] == index) {
- hash_table[0][originKey][j] = 0;
- break;
- }
- }
- hash_name[index] = changestr;
- break;
- case 1:
- origin = hash_num[index];
- originKey = getHashKey(origin);
- for (int j = 0; j < cnt[1][originKey]; j++) {
- if(hash_table[1][originKey][j] == index) {
- hash_table[1][originKey][j] = 0;
- break;
- }
- }
- hash_num[index] = changestr;
- break;
- case 2:
- origin = hash_birth[index];
- originKey = getHashKey(origin);
- for (int j = 0; j < cnt[2][originKey]; j++) {
- if(hash_table[2][originKey][j] == index) {
- hash_table[2][originKey][j] = 0;
- break;
- }
- }
- hash_birth[index] = changestr;
- break;
- case 3:
- origin = hash_email[index];
- originKey = getHashKey(origin);
- for (int j = 0; j < cnt[3][originKey]; j++) {
- if(hash_table[3][originKey][j] == index) {
- hash_table[3][originKey][j] = 0;
- break;
- }
- }
- hash_email[index] = changestr;
- break;
- case 4:
- origin = hash_memo[index];
- originKey = getHashKey(origin);
- for (int j = 0; j < cnt[4][originKey]; j++) {
- if(hash_table[4][originKey][j] == index) {
- hash_table[4][originKey][j] = 0;
- break;
- }
- }
- hash_memo[index] = changestr;
- break;
-
- default:
- break;
- }
- count++;
- changeVal(changefield, getHashKey(changestr), index);
- }
- }
- break;
- case 1: // number
- key = getHashKey(str);
- for (int i = 0; i < cnt[1][key]; i++) {
- int index = hash_table[1][key][i];
- if(index == 0) continue;
- if(isEquals(hash_num[index], str) && !visited[index]) {
- switch (changefield) {
- case 0:
- origin = hash_name[index];
- originKey = getHashKey(origin);
- for (int j = 0; j < cnt[0][originKey]; j++) {
- if(hash_table[0][originKey][j] == index) {
- hash_table[0][originKey][j] = 0;
- break;
- }
- }
- hash_name[index] = changestr;
- break;
- case 1:
- origin = hash_num[index];
- originKey = getHashKey(origin);
- for (int j = 0; j < cnt[1][originKey]; j++) {
- if(hash_table[1][originKey][j] == index) {
- hash_table[1][originKey][j] = 0;
- break;
- }
- }
- hash_num[index] = changestr;
- break;
- case 2:
- origin = hash_birth[index];
- originKey = getHashKey(origin);
- for (int j = 0; j < cnt[2][originKey]; j++) {
- if(hash_table[2][originKey][j] == index) {
- hash_table[2][originKey][j] = 0;
- break;
- }
- }
- hash_birth[index] = changestr;
- break;
- case 3:
- origin = hash_email[index];
- originKey = getHashKey(origin);
- for (int j = 0; j < cnt[3][originKey]; j++) {
- if(hash_table[3][originKey][j] == index) {
- hash_table[3][originKey][j] = 0;
- break;
- }
- }
- hash_email[index] = changestr;
- break;
- case 4:
- origin = hash_memo[index];
- originKey = getHashKey(origin);
- for (int j = 0; j < cnt[4][originKey]; j++) {
- if(hash_table[4][originKey][j] == index) {
- hash_table[4][originKey][j] = 0;
- break;
- }
- }
- hash_memo[index] = changestr;
- break;
-
- default:
- break;
- }
- count++;
- changeVal(changefield, getHashKey(changestr), index);
- }
- }
- break;
- case 2: // birthday
- key = getHashKey(str);
- for (int i = 0; i < cnt[2][key]; i++) {
- int index = hash_table[2][key][i];
- if(index == 0) continue;
- if(isEquals(hash_birth[index], str) && !visited[index]) {
- switch (changefield) {
- case 0:
- origin = hash_name[index];
- originKey = getHashKey(origin);
- for (int j = 0; j < cnt[0][originKey]; j++) {
- if(hash_table[0][originKey][j] == index) {
- hash_table[0][originKey][j] = 0;
- break;
- }
- }
- hash_name[index] = changestr;
- break;
- case 1:
- origin = hash_num[index];
- originKey = getHashKey(origin);
- for (int j = 0; j < cnt[1][originKey]; j++) {
- if(hash_table[1][originKey][j] == index) {
- hash_table[1][originKey][j] = 0;
- break;
- }
- }
- hash_num[index] = changestr;
- break;
- case 2:
- origin = hash_birth[index];
- originKey = getHashKey(origin);
- for (int j = 0; j < cnt[2][originKey]; j++) {
- if(hash_table[2][originKey][j] == index) {
- hash_table[2][originKey][j] = 0;
- break;
- }
- }
- hash_birth[index] = changestr;
- break;
- case 3:
- origin = hash_email[index];
- originKey = getHashKey(origin);
- for (int j = 0; j < cnt[3][originKey]; j++) {
- if(hash_table[3][originKey][j] == index) {
- hash_table[3][originKey][j] = 0;
- break;
- }
- }
- hash_email[index] = changestr;
- break;
- case 4:
- origin = hash_memo[index];
- originKey = getHashKey(origin);
- for (int j = 0; j < cnt[4][originKey]; j++) {
- if(hash_table[4][originKey][j] == index) {
- hash_table[4][originKey][j] = 0;
- break;
- }
- }
- hash_memo[index] = changestr;
- break;
-
- default:
- break;
- }
- count++;
- changeVal(changefield, getHashKey(changestr), index);
- }
- }
- break;
- case 3: // email
- key = getHashKey(str);
- for (int i = 0; i < cnt[3][key]; i++) {
- int index = hash_table[3][key][i];
- if(index == 0) continue;
- if(isEquals(hash_email[index], str) && !visited[index]) {
- switch (changefield) {
- case 0:
- origin = hash_name[index];
- originKey = getHashKey(origin);
- for (int j = 0; j < cnt[0][originKey]; j++) {
- if(hash_table[0][originKey][j] == index) {
- hash_table[0][originKey][j] = 0;
- break;
- }
- }
- hash_name[index] = changestr;
- break;
- case 1:
- origin = hash_num[index];
- originKey = getHashKey(origin);
- for (int j = 0; j < cnt[1][originKey]; j++) {
- if(hash_table[1][originKey][j] == index) {
- hash_table[1][originKey][j] = 0;
- break;
- }
- }
- hash_num[index] = changestr;
- break;
- case 2:
- origin = hash_birth[index];
- originKey = getHashKey(origin);
- for (int j = 0; j < cnt[2][originKey]; j++) {
- if(hash_table[2][originKey][j] == index) {
- hash_table[2][originKey][j] = 0;
- break;
- }
- }
- hash_birth[index] = changestr;
- break;
- case 3:
- origin = hash_email[index];
- originKey = getHashKey(origin);
- for (int j = 0; j < cnt[3][originKey]; j++) {
- if(hash_table[3][originKey][j] == index) {
- hash_table[3][originKey][j] = 0;
- break;
- }
- }
- hash_email[index] = changestr;
- break;
- case 4:
- origin = hash_memo[index];
- originKey = getHashKey(origin);
- for (int j = 0; j < cnt[4][originKey]; j++) {
- if(hash_table[4][originKey][j] == index) {
- hash_table[4][originKey][j] = 0;
- break;
- }
- }
- hash_memo[index] = changestr;
- break;
-
- default:
- break;
- }
- count++;
- changeVal(changefield, getHashKey(changestr), index);
- }
- }
- break;
- case 4: // memo
- key = getHashKey(str);
- for (int i = 0; i < cnt[4][key]; i++) {
- int index = hash_table[4][key][i];
- if(index == 0) continue;
- if(isEquals(hash_memo[index], str) && !visited[index]) {
- switch (changefield) {
- case 0:
- origin = hash_name[index];
- originKey = getHashKey(origin);
- for (int j = 0; j < cnt[0][originKey]; j++) {
- if(hash_table[0][originKey][j] == index) {
- hash_table[0][originKey][j] = 0;
- break;
- }
- }
- hash_name[index] = changestr;
- break;
- case 1:
- origin = hash_num[index];
- originKey = getHashKey(origin);
- for (int j = 0; j < cnt[1][originKey]; j++) {
- if(hash_table[1][originKey][j] == index) {
- hash_table[1][originKey][j] = 0;
- break;
- }
- }
- hash_num[index] = changestr;
- break;
- case 2:
- origin = hash_birth[index];
- originKey = getHashKey(origin);
- for (int j = 0; j < cnt[2][originKey]; j++) {
- if(hash_table[2][originKey][j] == index) {
- hash_table[2][originKey][j] = 0;
- break;
- }
- }
- hash_birth[index] = changestr;
- break;
- case 3:
- origin = hash_email[index];
- originKey = getHashKey(origin);
- for (int j = 0; j < cnt[3][originKey]; j++) {
- if(hash_table[3][originKey][j] == index) {
- hash_table[3][originKey][j] = 0;
- break;
- }
- }
- hash_email[index] = changestr;
- break;
- case 4:
- origin = hash_memo[index];
- originKey = getHashKey(origin);
- for (int j = 0; j < cnt[4][originKey]; j++) {
- if(hash_table[4][originKey][j] == index) {
- hash_table[4][originKey][j] = 0;
- break;
- }
- }
- hash_memo[index] = changestr;
- break;
-
- default:
- break;
- }
- count++;
- changeVal(changefield, getHashKey(changestr), index);
- }
- }
- break;
-
- default:
- break;
- }
-
- return count;
- }
-
- Solution.Result Search(int field, String str, int returnfield)
- {
- Solution.Result result = new Solution.Result();
- result.count = 0;
- result.str = "";
-
- int key = 0;
-
- switch (field) {
- case 0: // name
- key = getHashKey(str);
- for (int i = 0; i < cnt[0][key]; i++) {
- int index = hash_table[0][key][i];
- if(index == 0) continue;
- if(isEquals(hash_name[index], str) && !visited[index]) {
- result.count++;
- if(result.count == 1) {
- switch (returnfield) {
- case 0:
- result.str = hash_name[index];
- break;
- case 1:
- result.str = hash_num[index];
- break;
-
- case 2:
- result.str = hash_birth[index];
- break;
-
- case 3:
- result.str = hash_email[index];
- break;
-
- case 4:
- result.str = hash_memo[index];
- break;
-
- default:
- break;
- }
- }
- else
- result.str = "";
- }
- }
- break;
- case 1: // number
- key = getHashKey(str);
- for (int i = 0; i < cnt[1][key]; i++) {
- int index = hash_table[1][key][i];
- if(index == 0) continue;
- if(isEquals(hash_num[index], str) && !visited[index]) {
- result.count++;
- if(result.count == 1) {
- switch (returnfield) {
- case 0:
- result.str = hash_name[index];
- break;
- case 1:
- result.str = hash_num[index];
- break;
-
- case 2:
- result.str = hash_birth[index];
- break;
-
- case 3:
- result.str = hash_email[index];
- break;
-
- case 4:
- result.str = hash_memo[index];
- break;
-
- default:
- break;
- }
- }
- else
- result.str = "";
- }
- }
- break;
- case 2: // birthday
- key = getHashKey(str);
- for (int i = 0; i < cnt[2][key]; i++) {
- int index = hash_table[2][key][i];
- if(index == 0) continue;
- if(isEquals(hash_birth[index], str) && !visited[index]) {
- result.count++;
- if(result.count == 1) {
- switch (returnfield) {
- case 0:
- result.str = hash_name[index];
- break;
- case 1:
- result.str = hash_num[index];
- break;
-
- case 2:
- result.str = hash_birth[index];
- break;
-
- case 3:
- result.str = hash_email[index];
- break;
-
- case 4:
- result.str = hash_memo[index];
- break;
-
- default:
- break;
- }
- }
- else
- result.str = "";
- }
- }
- break;
- case 3: // email
- key = getHashKey(str);
- for (int i = 0; i < cnt[3][key]; i++) {
- int index = hash_table[3][key][i];
- if(index == 0) continue;
- if(isEquals(hash_email[index], str) && !visited[index]) {
- result.count++;
- if(result.count == 1) {
- switch (returnfield) {
- case 0:
- result.str = hash_name[index];
- break;
- case 1:
- result.str = hash_num[index];
- break;
-
- case 2:
- result.str = hash_birth[index];
- break;
-
- case 3:
- result.str = hash_email[index];
- break;
-
- case 4:
- result.str = hash_memo[index];
- break;
-
- default:
- break;
- }
- }
- else
- result.str = "";
- }
- }
- break;
- case 4: // memo
- key = getHashKey(str);
- for (int i = 0; i < cnt[4][key]; i++) {
- int index = hash_table[4][key][i];
- if(index == 0) continue;
- if(isEquals(hash_memo[index], str) && !visited[index]) {
- result.count++;
- if(result.count == 1) {
- switch (returnfield) {
- case 0:
- result.str = hash_name[index];
- break;
- case 1:
- result.str = hash_num[index];
- break;
-
- case 2:
- result.str = hash_birth[index];
- break;
-
- case 3:
- result.str = hash_email[index];
- break;
-
- case 4:
- result.str = hash_memo[index];
- break;
-
- default:
- break;
- }
- }
- else
- result.str = "";
- }
- }
- break;
-
- default:
- break;
- }
-
- return result;
- }
-}
-