A 공장에서 사용하는 인쇄 장비의 인쇄물에는 고유 ID가 적혀있다고 한다. 인쇄물의 품질 유지를 위해서는 인쇄 카트리지 제조사의 권장사항에 근거하여 5작업단위마다 카트리지를 교체해주어야 한다. 그런데 낮에 작업한 인쇄물에 불량을 발견하여 몇 번 카트리지에서 문제가 발생했는지 알아보고자 한다. 각 인쇄작업에 소요된 작업단위를 기반으로 몇 번 카트리지가 몇 번 인쇄물의 인쇄에 사용되었는지 알아보자.
인쇄물에 사용된 카트리지 번호는 특정 인쇄물에 사용되는 작업 단위가 5를 넘어가는 경우 두 개의 카트리지가 기록이 되어야 한다. 예를 들어 앞에서 만든 데이터 중 “ID”가 2인 경우 “unit”의 누적값이 6이기 때문에 첫 번째 카트리지와 두 번째 카트리지를 사용해야하기 때문에 “1/2”로 표기되어야 한다.
풀이
반복문 활용
작업단위가 5를 넘어가는지 확인하기 위한 객체인 “unit_check”와 카트리지 번호를 부여하기 위한 객체인 “cart_count”를 준비하여 반복문을 작성한다.
1번 코드의 조건문에서는 누적 작업단위가 5 이상인 경우 카트리지 번호의 +1을 기록하고 그렇지 않은 경우 기존의 카트리지 번호가 입력되도록 하였다. 그런데 특정 인쇄물을 인쇄하면서 누적 작업단위가 5를 초과한다면 기존에 사용하던 카트리지와 새로운 카트리지 둘 다 필요하기 때문에 새로운 분기를 2번 코드의 조건문을 통해서 만들고 3번 코드를 사용하여 복수개의 카트리지 번호를 기록하도록 하였다. 그리고 1번 조건문에 속하는 4, 5번 코드는 카트리지 번호를 1 증가시키고 작업단위 만큼 다시 빼주는 기능을 수행한다.
벡터연산을 실시할 때 까다로운것이 한 인쇄물에서 두 개의 카트리지를 사용하는 경우이다. 이 처리를 위해서는 카트리지 번호 또는 그와 관련된 정보를 담고있는 최소 2개 이상의 신규 변수가 필요하다. 이를 위해 누적합의 몫이 증가했음을 알 수 있도록 몫(quotient)의 차분을 구하여 “diff”변수에 할당하였고, 누적합의 몫에 1을 더한 값을 “q2”변수에 할당하였다. 단, “q2”는 작업단위가 정확하게 5의 배수가 되는경우 값이 증가하지 않도록 했다.