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; - } -} -