diff --git "a/Futer_Improvement/\352\263\274\353\252\251 \354\266\224\354\262\234 \354\225\214\352\263\240\353\246\254\354\246\230/Recommend_Lecture.java" "b/Futer_Improvement/\352\263\274\353\252\251 \354\266\224\354\262\234 \354\225\214\352\263\240\353\246\254\354\246\230/Recommend_Lecture.java" new file mode 100644 index 0000000..ddf3e26 --- /dev/null +++ "b/Futer_Improvement/\352\263\274\353\252\251 \354\266\224\354\262\234 \354\225\214\352\263\240\353\246\254\354\246\230/Recommend_Lecture.java" @@ -0,0 +1,140 @@ +import java.util.*; + +public class Recommend_Lecture { + + public static void main(String[] args) { + // 추천 과목을 요청하는 유저 A의 정보 (DB에서 가져오는걸로 수정) + // 함수 초기 매개변수: User 또는 User의 ID + Major + String A_ID = "2020113456"; + String A_major = "컴퓨터공학전공"; + + // 유저 A의 수강한 과목 리스트 (DB에서 가져오는걸로 수정) + List> A_Database = Arrays.asList( + Arrays.asList("2023", "2학기", "심화프로그래밍"), + Arrays.asList("2023", "2학기", "어드벤처디자인"), + Arrays.asList("2023", "1학기", "화학개론"), + Arrays.asList("2023", "1학기", "컴퓨터구성") + ); + + // 현재 행의 과목 이름을 배열 A_Attended에 저장한다 + List A_Attended = new ArrayList<>(); + for (List list : A_Database) { + A_Attended.add(list.get(2)); + } + + // A의 이수학기 + int A_Semester = calculateSemester(A_Database); + + // 기존에 존재한 다른 유저들(B)의 정보 (DB에서 가져오는걸로 수정) + String B1_ID = "2019115678"; + String B1_Major = "컴퓨터공학전공"; + + String B2_ID = "2019117891"; + String B2_Major = "컴퓨터공학전공"; + + String B3_ID = "2021113456"; + String B3_Major = "컴퓨터공학전공"; + + List> B1_Database = Arrays.asList( + Arrays.asList("2024", "2학기", "심화프로그래밍"), + Arrays.asList("2024", "2학기", "알고리즘"), + Arrays.asList("2024", "1학기", "운영체제"), + Arrays.asList("2023", "2학기", "심화프로그래밍") + ); + List> B2_Database = Arrays.asList( + Arrays.asList("2024", "2학기", "알고리즘"), + Arrays.asList("2023", "2학기", "데이터베이스"), + Arrays.asList("2023", "겨울학기", "개별연구1"), + Arrays.asList("2023", "1학기", "컴퓨터구성"), + Arrays.asList("2022", "2학기", "기초프로그래밍") + ); + List> B3_Database = Arrays.asList( + Arrays.asList("2024", "2학기", "인공지능"), + Arrays.asList("2023", "2학기", "데이터베이스") + ); + + // 추천과목을 저장할 자료구조: B_Attended + Map B_Attended = new HashMap<>(); + + System.out.println("A 이수학기: " + A_Semester); + System.out.println("B1 이수학기: " + calculateSemester(B1_Database)); + System.out.println("B2 이수학기: " + calculateSemester(B2_Database)); + System.out.println("B3 이수학기: " + calculateSemester(B3_Database)); + + // 각각의 B 유저에 대해 학기 수를 비교하고, A가 들을만한 과목들을 B_Attended에 저장한다. + if (calculateSemester(B1_Database) - A_Semester > 0) { + int k = calculateSemester(B1_Database) - A_Semester; + List temp = returnSemester(B1_Database, k); + + for (String lectureName : temp) { + B_Attended.put(lectureName, B_Attended.getOrDefault(lectureName, 0) + 1); + } + } + + if (calculateSemester(B2_Database) - A_Semester > 0) { + int k = calculateSemester(B2_Database) - A_Semester; + List temp = returnSemester(B2_Database, k); + + for (String lectureName : temp) { + B_Attended.put(lectureName, B_Attended.getOrDefault(lectureName, 0) + 1); + } + } + + if (calculateSemester(B3_Database) - A_Semester > 0) { + int k = calculateSemester(B3_Database) - A_Semester; + List temp = returnSemester(B3_Database, k); + + for (String lectureName : temp) { + B_Attended.put(lectureName, B_Attended.getOrDefault(lectureName, 0) + 1); + } + } + + // B_Attended와 A_Attended의 중복 항목을 삭제한다 + for (String lecture : A_Attended) { + B_Attended.remove(lecture); + } + + // B_Attended를 정렬한다. + List> sorted_B_Attended = new ArrayList<>(B_Attended.entrySet()); + sorted_B_Attended.sort((a, b) -> b.getValue().compareTo(a.getValue())); + + for (Map.Entry entry : sorted_B_Attended) { + System.out.println(entry.getKey() + ": " + entry.getValue()); + } + } + + // User DB의 정보를 이용해 이수 학기를 계산하는 함수 + public static int calculateSemester(List> User_Database) { + int i = 1; + String yearSemester = User_Database.get(0).get(0) + User_Database.get(0).get(1); + for (List lecture : User_Database) { + String currentYearSemester = lecture.get(0) + lecture.get(1); + if (!yearSemester.equals(currentYearSemester)) { + if (!currentYearSemester.contains("겨울학기") && !currentYearSemester.contains("여름학기")) { + i++; + yearSemester = currentYearSemester; + } + } + } + return i; + } + + // 유저의 DB와 학기 차이 수를 이용해서 A가 다음 학기에 들을만한 과목들을 배열로 만들어 반환 + public static List returnSemester(List> User_Database, int k) { + int i = 1; + List result = new ArrayList<>(); + String yearSemester = User_Database.get(0).get(0) + User_Database.get(0).get(1); + for (List lecture : User_Database) { + if (!yearSemester.equals(lecture.get(0) + lecture.get(1))) { + i++; + yearSemester = lecture.get(0) + lecture.get(1); + } + if (i == k) { + result.add(lecture.get(2)); + } else if (i > k) { + break; // 이미 k번째 학기를 지난 경우 루프 종료 + } + } + return result; + } +} diff --git "a/Futer_Improvement/\352\263\274\353\252\251 \354\266\224\354\262\234 \354\225\214\352\263\240\353\246\254\354\246\230/Theme.pdf" "b/Futer_Improvement/\352\263\274\353\252\251 \354\266\224\354\262\234 \354\225\214\352\263\240\353\246\254\354\246\230/Theme.pdf" new file mode 100644 index 0000000..344f4cf Binary files /dev/null and "b/Futer_Improvement/\352\263\274\353\252\251 \354\266\224\354\262\234 \354\225\214\352\263\240\353\246\254\354\246\230/Theme.pdf" differ diff --git "a/Futer_Improvement/\354\213\244\354\213\234\352\260\204 \354\235\270\352\270\260 \352\262\200\354\203\211 \355\202\244\354\233\214\353\223\234/Theme.txt" "b/Futer_Improvement/\354\213\244\354\213\234\352\260\204 \354\235\270\352\270\260 \352\262\200\354\203\211 \355\202\244\354\233\214\353\223\234/Theme.txt" new file mode 100644 index 0000000..b13d037 --- /dev/null +++ "b/Futer_Improvement/\354\213\244\354\213\234\352\260\204 \354\235\270\352\270\260 \352\262\200\354\203\211 \355\202\244\354\233\214\353\223\234/Theme.txt" @@ -0,0 +1,3 @@ +다양한 사용자들의 질의문을 파싱하여 각 단어별 사용 빈도수를 추적해 저장한다. +이후 저장한 데이터를 바탕으로 일정 기간동안 가장 많이 사용된 단어를 '실시간 인기 검색어'로 지정한다. +'실시간 인기 검색어'로 지정된 키워드는 검색창의 상단에 표시되며, 사용자는 이를 바탕으로 최신 검색 트렌드를 알 수 있다. \ No newline at end of file