-
#Project '당직표 프로그램 만들기'개인 프로젝트 2020. 3. 9. 21:29
+파일은 메일로 요청해주세요
cheysh226@gmail.com
Q. '당직표' 만들어 주는 프로그램은 없을까?
누나한테서 당직표를 만드는데 1주일쯤 걸린다고 들었다. 갓 C 언어를 배웠고, 써먹을 곳을 찾고 있었고, 마침 시간도 많았다.
하루 7명 당직 (총 인원 15)
오전 오후 A 1명 C 1명 B 3명 D 2명 예외
- 금요일은 최대 1번
- 휴가 전날 오후 당직 x
- 연달아 3일은 불가능(aaa, ppp X)
- 총시간 비슷하게 해야 함
- 같은 팀(2명)은 당직 타임 x
- 휴가 다음날 1시간 아침 당직 x
중요한 아이디어
- 골고루 -> Random 함수
- 1~N번까지 번호로 당직표를 작성.
- 입력받을 것 : 한 달 평일 수(20~23일), 직원의 수, 휴가 나가는 직원
- 휴가 처리 : if문 + continue, break 이용
- 최대-최소 시간 차이 : Do- while 이용
- 마지막에는 직접 형평성을 맞춘다
1. 오전 A(30분) 근무
RandomTeacher로 무작위 숫자를 받고, Check [] 배열에 넣어줬다. 한번 나온 숫자는 다음번에 잘 안 나오도록 했다.
'같은 팀은 당직이 겹치면 안 된다' 이렇게 하기 위해서, 같은 팀은 연달아 배치했다. ex) 12, 34, 56 각각 한 팀
2. 오전 B(60분) 근무
B 근무는 A근무와 겹치면 안 된다. Check []를 이용해서 걸러냈다.
또 고르게 분포하기 위해 코드가 길어졌다. 지금까지 가장 많이 나온 선생님은 당직에 선택이 안되도록 했다.
3. 배열의 초기화가 문제였다.
중간중간 에러가 많이 발생했는데, 가장 큰 문제는 배열의 초기화였다. Do-while문으로 모든 배열을 "0"으로 만드는 게 가장 좋았다.
이해가 안 가는 부분은, 왜 최대-최소가 600분 이하로 안 떨어지는지 모르겠다. 그래서 마지막에 직접 손봐야 한다.
4. C++로 할 수 있는 건 여기까지..
: 여기까지가 일주일간 C++로 만든 근무표다. 숫자는 선생님을 의미한다. 위 결과를 선생님 이름으로 바꿔주면 아래와 같다.
5. 만들었긴 했는데 뭔가 부족하다! 개선사항은?
코드가 너무 지저분하다. 함수를 만들어서 불러오고 싶었는데, 당시에 어려워서 못했다. 다음번에 도전해 볼 생각이다.
또 마지막엔 사람의 손길이 필요하다는 것이다. 숫자 -> 이름 바꿔주는 걸 만들어서 자동화를 해보고 싶다.
-결론-
Q. 당직표를 만들어주는 프로그램은 없을까?
구글링 해보니깐 있는데 10만 원이나 한다, 매번 만들기 귀찮으니까 당직표 '보조' 프로그램을 만들었다. 이 프로그램이면 10분 안에 당직표가 만들어진다. 다른 형태의 당직표도 충분히 만들 수 있을 것 같다.
'개인 프로젝트' 카테고리의 다른 글
#Project '마스크 알리미' (0) 2020.06.10 #Project '내 컴퓨터를 서버로 만드는 과정' (0) 2020.04.25 #Project '파이썬으로 엑셀 크롤링하기' (0) 2020.03.22