ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • #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분) 근무

     

    A(30분)근무 출력하기

     

    RandomTeacher로 무작위 숫자를 받고, Check [] 배열에 넣어줬다. 한번 나온 숫자는 다음번에 잘 안 나오도록 했다. 

    '같은 팀은 당직이 겹치면 안 된다' 이렇게 하기 위해서, 같은 팀은 연달아 배치했다. ex) 12, 34, 56 각각 한 팀

     

    2. 오전 B(60분) 근무

     

    딱 봐도 B 근무(60분) 출력은 더 복잡함

     

    B 근무는 A근무와 겹치면 안 된다. Check []를 이용해서 걸러냈다.

    또 고르게 분포하기 위해 코드가 길어졌다. 지금까지 가장 많이 나온 선생님은 당직에 선택이 안되도록 했다.

     

    3. 배열의 초기화가 문제였다.

     

    차이가 작을때까지 코드 전체를 반복하는 Do-while

     

    중간중간 에러가 많이 발생했는데, 가장 큰 문제는 배열의 초기화였다. Do-while문으로 모든 배열을 "0"으로 만드는 게 가장 좋았다. 

    이해가 안 가는 부분은, 왜 최대-최소가 600분 이하로 안 떨어지는지 모르겠다. 그래서 마지막에 직접 손봐야 한다.

     

    4. C++로 할 수 있는 건 여기까지.. 

     

    평일 순서대로, 해당되는 선생님 숫자를 표시했다 **520은 근무시간 차이

     

    : 여기까지가 일주일간 C++로 만든 근무표다. 숫자는 선생님을 의미한다. 위 결과를 선생님 이름으로 바꿔주면 아래와 같다.

     

    맨 위는 선생님 당직 시간이다. 이름은 블러처리 했다.

     

    5. 만들었긴 했는데 뭔가 부족하다! 개선사항은?

     

    코드가 너무 지저분하다. 함수를 만들어서 불러오고 싶었는데, 당시에 어려워서 못했다. 다음번에 도전해 볼 생각이다.

    또 마지막엔 사람의 손길이 필요하다는 것이다. 숫자 -> 이름 바꿔주는 걸 만들어서 자동화를 해보고 싶다.

     

    -결론-

    Q. 당직표를 만들어주는 프로그램은 없을까?

    구글링 해보니깐 있는데 10만 원이나 한다, 매번 만들기 귀찮으니까 당직표 '보조' 프로그램을 만들었다. 이 프로그램이면 10분 안에 당직표가 만들어진다. 다른 형태의 당직표도 충분히 만들 수 있을 것 같다.

    댓글

Designed by Tistory.