Skip to content

Commit

Permalink
향후 개선 방안 추가
Browse files Browse the repository at this point in the history
  • Loading branch information
Edrient authored Jun 16, 2024
1 parent b43b0e1 commit ee7be4a
Show file tree
Hide file tree
Showing 3 changed files with 143 additions and 0 deletions.
140 changes: 140 additions & 0 deletions Futer_Improvement/과목 추천 알고리즘/Recommend_Lecture.java
Original file line number Diff line number Diff line change
@@ -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<List<String>> A_Database = Arrays.asList(
Arrays.asList("2023", "2학기", "심화프로그래밍"),
Arrays.asList("2023", "2학기", "어드벤처디자인"),
Arrays.asList("2023", "1학기", "화학개론"),
Arrays.asList("2023", "1학기", "컴퓨터구성")
);

// 현재 행의 과목 이름을 배열 A_Attended에 저장한다
List<String> A_Attended = new ArrayList<>();
for (List<String> 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<List<String>> B1_Database = Arrays.asList(
Arrays.asList("2024", "2학기", "심화프로그래밍"),
Arrays.asList("2024", "2학기", "알고리즘"),
Arrays.asList("2024", "1학기", "운영체제"),
Arrays.asList("2023", "2학기", "심화프로그래밍")
);
List<List<String>> 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<List<String>> B3_Database = Arrays.asList(
Arrays.asList("2024", "2학기", "인공지능"),
Arrays.asList("2023", "2학기", "데이터베이스")
);

// 추천과목을 저장할 자료구조: B_Attended
Map<String, Integer> 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<String> 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<String> 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<String> 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<Map.Entry<String, Integer>> sorted_B_Attended = new ArrayList<>(B_Attended.entrySet());
sorted_B_Attended.sort((a, b) -> b.getValue().compareTo(a.getValue()));

for (Map.Entry<String, Integer> entry : sorted_B_Attended) {
System.out.println(entry.getKey() + ": " + entry.getValue());
}
}

// User DB의 정보를 이용해 이수 학기를 계산하는 함수
public static int calculateSemester(List<List<String>> User_Database) {
int i = 1;
String yearSemester = User_Database.get(0).get(0) + User_Database.get(0).get(1);
for (List<String> 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<String> returnSemester(List<List<String>> User_Database, int k) {
int i = 1;
List<String> result = new ArrayList<>();
String yearSemester = User_Database.get(0).get(0) + User_Database.get(0).get(1);
for (List<String> 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;
}
}
Binary file not shown.
3 changes: 3 additions & 0 deletions Futer_Improvement/실시간 인기 검색 키워드/Theme.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
다양한 사용자들의 질의문을 파싱하여 각 단어별 사용 빈도수를 추적해 저장한다.
이후 저장한 데이터를 바탕으로 일정 기간동안 가장 많이 사용된 단어를 '실시간 인기 검색어'로 지정한다.
'실시간 인기 검색어'로 지정된 키워드는 검색창의 상단에 표시되며, 사용자는 이를 바탕으로 최신 검색 트렌드를 알 수 있다.

0 comments on commit ee7be4a

Please sign in to comment.