시간표생성프로그램 - 알고리즘 구현

2024. 8. 16. 11:13Project

다음 방식으로 알고리즘을 구현하였다.

 

1. 사용자가 입력한 수업들은 classes 라는 객체에 저장된다.

-> 

txt파일을 통해 일괄적으로 등록을 할 수 있다.

FileReader 를 이용하여 , 를 기준으로 트리밍하여, 각 내용들을 객체의 key에 대한 value 값으로 저장하도록 하였다.

 

2. classes에 저장된 수업들로부터 생성된 시간표 조합은 combineResult 라는 객체에 저장된다.

 

3. 수업을 조합하는 방식은 다음과 같다.

-> 

먼저 등록된 수업 중 필수로 포함되도록 체크되어있는 수업을 먼저 combineResult 객체를 생성하여 저장하도록 한다.

이때, 중복으로 똑같은 과목이 필수로 포함되거나,. 시간이 겹치는 경우는 추가하지 않고 alert을 이용하여 안내를 띄운    후 window.location.reload 를 이용하여 되돌아가도록 설계했다.

 

->

먼저 입력된 수업들을 기반으로 각 수업들을 과목별로 분리해 객체배열을 만들어 준 뒤, 과목명들만 담긴 배열도 만들어준다.

 

->

그 후 GPT의 조언대로 피셔에이츠셔플 알고리즘을 이용하여 과목명 배열의 요소들의 순서를 무작위로 바꾸어주었다.

 

->

과목명 배열 내 요소 순서대로 각 과목을 시간표에 추가해준다

이때, 1학기 자료구조 시간에 배운 재귀 호출을 이용하여 알고리즘을 구현하였다.

 

foreach 문을 이용하여 첫번째 과목의 각 수업을 꺼내 먼저 임시 시간표배열을 만들어주고 필수로 포함해야 하는

과목들을 먼저 추가한다

 

재귀호출을 이용하여 과목에 대한 수업을 마찬가지로 foreach 문을 이용하여 꺼내 저장하고 마지막 과목의 경우 

timetable 이라는 객체를 만들어 combineResult 객체에 저장하도록 하였다.

(단, 조합된 과목의 수가 입력된 과목의 수 와 같은 경우에만)

 


4. 이후 Session Storage 를 이용하여 classes 객체와 combineResult를 저장하고 result 페이지에서 조합된 결과를 

    볼 수 있게 구현하였다.

 

 

테스트는 아래에서 해볼 수 있다.

https://everjun2.github.io/TimeTableMaker/