• [잡설] 간단한 산수문제2012.11.23 PM 04:54

게시물 주소 FONT글자 작게하기 글자 키우기

상자에 가져갈 수 있는 사과가 10개가 있다.

A는 사과를 5개 가져가려고 했다. 그래서 5개를 예약하려한다.
B도 사과를 6개 가져가려한다. 그래서 6개를 예약하려 한다.

그런데 A가 예약하고나서 B도 바로 예약하면 B는 6개를 가져갈 수 없지 않나.
그래서 남은 사과 개수를 B에게 알려준다.
(예약수량 > 남은수량 = 모자라는건 주문해.)
B는 6개 주문하고 5개 예약받고 1개는 주문대기로 들어간다.

참 간단해보인다.

그런데 A가 돌아와서 사과를 7개로 늘린다고 한다.
그럼 사과 수량은 5개에서 7개가 되야한다.
현재 주문량 5개, 예약량이 5개, 상자에 남은 사과가 5개다.
여기서 주문량이 7개가 되면 예약량할 수 있는 양도 7개가 되는데 공식에 위배되버린다.
(주문량 7> 남은수량 5 = 주문해.)

이러면 안되지 않는가?!?! 실제로 더 가져갈 수 있는데!
그래서 이경우엔 공식을 바꾼다.
(주문량 - 예약량 > 남은수량= 주문해)
자, 이러면 7-7 은 5보다 작으니 얼마든지 수량을 늘릴 수 있다.

그러나 여기서 첫번째 문제가 생긴다.

A는 10개의 사과를 보고 7개를 사겠노라 주문했다.
이때 예약된건 7개다.
남은 사과는 3개다.

그런데 A가 주문하기 직전에 C라는 자가 남은 사과 3개를 사겠노라 주문했다.
그리고 사가버렸다.
여기서 A에게 주어질 공식을 보자.
(주문량 - 예약량 > 남은양)
(7- 7 >0)

아이러니하게도 공식에 위배되지 않아버린다!!
결국 A는 7개의 사과를 가져가야되는데 4개가 없다.
결국 사과는 -4개가 되어버린다.

이 과정을 뭔가 다른 공식을 통해 막아야한다.

어떻게 막아야하겠는가

라는 프로그램을 짜는중 아 ㅅㅂ 이거 계산 어떻게하지...
(위 과정은 실시간으로 일어나는게 아니라는걸 알아두셔야합니다. 그러니 A와 C의 모순이 생겨버립니다.)


아 너무 간단해서 머리 뽑고 싶다.
댓글 : 24 개
예약을 주문으로 빼고 후 추가 주문도 후 주문으로 넣으면 되지 않나여?
ㄴ총수량은 언제나 엄격히 일치해야합니다. 저 과정이 끝난 다음에나 입고 출고가 거쳐져서 수량이 맞춰지기 때문에 여기서부터 삐긋거리면 난리나거든요 ㅋ;;
뭔가 이상한데요?
A가 5개 예약, B가 6개 예약해서 모자라는 하나는 주문 대기
그러면 예약 A5, B5, 주문 B1 인상태에서 A가 7개로 늘리면
예약 A5, B5, 주문 A1, B2 이렇게 되야하는거 아닌가요?
근데 거기서 실제로 더 가져갈 수 있다는게 무슨말인지... =_=
제 머리론 이해가 안되요;
예약 주문 프로그램 만드시는건가;;
정말 간단하게 말하면 위 가게는 주인이 아주 멍청합니다.
그래서 손님은 가게에 와서 수첩에 적어놓고 그 수량을 가져가야하는데 주인은 수첩에 적힌 숫자만 보고 공식기를 두들겨서 맞추는거죠.

근데 문제가 되는 부분은 10개중에 A가 7개를 가져가려고 장부에 써놓고 화장실에 갔는데, C가 와서 냉큼 3개를 가져가버린겁니다. 그리고 A가 화장실에 갔다와서 나 7개 가져갈게요라고 하자
주인장은 공식기를 두드리더니 (주문량-예약량>0) ㅇㅇ 7개 가져가! 라고 말하자 A가 가져가려다가 없어서 멱살이 잡히는거죠.
주문자에 상관 없이 주문 번호를 부여해 그 주문 순서대로 처리해주면 되지 않나요? 예약이든 추가주문이든 상관없이

ㄴ 위 가게는 번호를 부여하지 않고 방문해서 가져가는 가게입니다. 라고 보시면 되겠네요. 현재 이 프로그램이 그런 방식이라 수 계산으로 밖에 동시 수행자를 막을 방법이 없습니다.
다른사람이 예약했는데 예약한사람이 안가져가면 그걸 그냥 팔아버린다는거군요...
그리고 예약한걸 바꾸는것도 실제 수량이 남아있다면 예약량에 상관없이 바꿔버리고...
그냥 예약이고 뭐고 먼저 가져가는게 임자라는건가;;
곰돌아굴러// 현재 프로그램이 그렇기에 그 부분을 숫자 계산으로 막는걸 프로그램 중인데 위 문제는 어떤방식으로 처리해야할지 갑갑해서요
총 수량과 총 주문량을 따로 계산해야 할 것 같네요.
A와 B의 문제의 경우
A가 5개, B가 5+1개를 주문함으로써 총 주문량은 10(+1)이 되지만, 총 수량은 5개가 되고 5개가 남습니다.
이때 A가 주문량을 5개에서 7개로 늘리려고 하지만 총 수량에선 가능해도 총 주문량에선 더 늘릴 수가 없게 되지요.
마찬가지로 C도 3개를 주문하고 싶지만 총 수량이 7개라서 3개가 남아도 총 주문량이 10이면 더 이상 주문할 수 없데 되지 않을까요.
ㄴ그렇게 하면 참 편한데....... 이게 또 예외규정이 있어서... 아 원래 이런용도의 프로그램이 아닌데... 이번에 고객사가 전체 업무과정을 바꾸면서 대개편중이라 머리가 아픕니다 ㅋㅋ...
A가 잘못했네!!!
ㄴ화장실에 왜가서!!!!! ㅋ
예외규정이라던지 프로세스를 전부 알고 있지 않는이상 위 내용만으로 뭔가 방법을 찾기는 굉장히 힘들듯 싶은데요 ㅎㅎ
DB에 현재수량, 판매 가용수량을 놓고
현재 수량 = 실제 물량
판매 가용수량 = 실제물량 - 예약량
이렇게 해서 구매한건 현재수량에서 바로 빠지고
예약한건 판매가용수량 내에서만 가능하도록 해야할거 같은데요...
아 몰라 세크스
방법을 제시하는데 제시할 때마다 예외가 있다고 하시면 누가 어떻게 도와주나요;;;

확실한 도움을 받고 싶으시면 모든 정보를 먼저 알려주시는게 먼저인 것 같습니다
ㄴ이게 뭐라고 해야할까요.
할당재고, 가용재고, 수주수량 이 세가지로 굴러가는 부분인데

할당재고는 먼저 수주수량 < 가용재고 면 수주수량만큼 가져오고
수주수량 > 가용재고 면 가용재고만큼만 가져옵니다.

그런데 할당재고가 가용재고보다 커지는 사태가 발생하면, 가용재고만큼만 할당재고를 떨어내고 나머지 부분은 발주요청으로 처리하도록 하는거죠.

여기서 가용재고가 100개고 기존에 처리된 수주수량 및 할당재고가 각각 80개입니다.

그러면 남은 가용재고가 20개인데 이후 80개를 낸 유저가 다시 접속해서 이걸 90개로 늘리려고 하다가 저장을 늦게하거나 자리를 비웠을때,

다른 영업사원이 재고를 잡아버려도 현 계산식에서는 (수주수량-할당재고 >= 가용재고)를 만족하기에 이부분을 못잡고 있는거죠.
ㄴ 마지막줄 계산식에서 같을때는 빼버리고 수주수량-할당재고>가용재고로 하고
같을때는 가용재고만큼만 가져오는걸로 바꾸면 어떤가요
뭔가... 문제 자체가 이상한거 같은데...


[상자에 가져갈 수 있는 사과가 10개가 있다.
A는 사과를 5개 가져가려고 했다. 그래서 5개를 예약하려한다.
B도 사과를 6개 가져가려한다. 그래서 6개를 예약하려 한다.
그런데 A가 예약하고나서 B도 바로 예약하면 B는 6개를 가져갈 수 없지 않나.
그래서 남은 사과 개수를 B에게 알려준다.
(예약수량 > 남은수량 = 모자라는건 주문해.)
B는 6개 주문하고 5개 예약받고 1개는 주문대기로 들어간다.]

여기까지는 문제가 없습니다.
A의 예약 수량은 5개고, B의 예약 수량은 6개이며, 가용 수량은 "-1"인 상태.


[그런데 A가 와서 사과를 7개로 늘린다고 한다.
그럼 사과 수량(A가 가져갈 수량=A가 예약한 수량)은 5개에서 7개가 되야한다.]

여기는 조건. 그런데.


[현재 주문량 5개, 예약량이 5개, 상자에 남은 사과가 5개다.
여기서 주문량이 7개가 되면 예약량할 수 있는 양도 7개가 되는데 공식에 위배되버린다.
(주문량 7> 남은수량 5 = 주문해.)]

이 부분부터 이해가 안되네요.
주문량이 예약량과는 달리 2개가 늘었는데, 그러면 예약할 수 있는 양이 왜 7개가 되는 건지... 3개가 돼야 맞는 거 아닌가요?

그리고, 이 상황에서 애시당초 A의 주문을 막아버리면 모든 것이 해결되는 문제 아닌가 싶습니다.
가용 수량은 이미 "-1"이며, 상자에 남아있다 하더라도 그것은 이미 B에게 예약되어 있는 상태이기 때문에, A가 주문 수량을 늘린다 하더라도 그것은 주문 수량이 아닌 추가 예약 수량으로 빠져야 하는 내용이 아닐까 하네요.


[이러면 안되지 않는가?!?! 실제로 더 가져갈 수 있는데!]

실제로 더 가져가서는 안 돼죠. B에게 예약된 수량인데 A에게 줄 수는 없잖아요.



그리고 그 다음.

[A는 10개의 사과를 보고 7개를 사겠노라 주문했다.
이때 예약된건 7개다.
남은 사과는 3개다.]

여기는 조건이죠. 이건 이해했습니다.


[그런데 A가 주문하기 직전에 C라는 자가 남은 사과 3개를 사겠노라 주문했다.
그리고 사가버렸다.
여기서 A에게 주어질 공식을 보자.
(주문량 - 예약량 > 남은양)
(7- 7 >0)

아이러니하게도 공식에 위배되지 않아버린다!!
결국 A는 7개의 사과를 가져가야되는데 4개가 없다.
결국 사과는 -4개가 되어버린다.]

여기도 이해가 안됍니다.

어째서 여기는 -4개가 되는 거죠?
C가 낼름 가져가지 못하게 하고, C의 주문을 예약으로 돌리면 해결되는 문제 아닐까요?

여기까지의 주문 및 수량 흐름을 정리하면,

1. A 1차예약 5개
2. B 1차예약 6개
3. A 1차예약 주문, 2차예약 2개
4. C 1차예약 3개

이렇게 정리한다면, 문제가 꼬일 일도 없어지죠.

시간 순서로 번호를 부여하지 않는 프로그램이 기반이라면, 그것은 전체 수량을 관리하는 프로그램으로 돌리고(마스터 프로그램) 그것의 서브 프로그램 개념으로 각 예약 및 주문별로 우선권을 부여하고 예약된 수량 이상은 주문할 수 없도록 하는, 그런 프로그램을 애드온 혹은 종속, 플러그인 등등으로 달면 해결되는 문제 아닐까 합니다.
울프맨 // 어차피 데이터가 저장되는건 '저장'을 할 때 아닌가요? 그렇다면 접속할 때 검사하는것과 마찬가지로 저장할 때 다시한번 검사를 하면 간단하게 해결될 것 같은데요? 마치 예판전쟁하듯이 먼저 처리한 사람이 장땡인것처럼요 ㅎㅎ

저장할 때 다시한번 검사를 하는 방법이나 세마포어같이 접근제어를 통해 다중 접속을 막는 방법 외에는 위와같은 문제를 피할 수 없을 것 같네요 ㅇㅅㅇ
제가 만든 프로그램이랑 오더 처리 프로세스가 거의 비슷하네요

그러면 남은 가용재고가 20개인데 이후 80개를 낸 유저가 다시 접속해서 이걸 90개로 늘리려고 하다가 저장을 늦게하거나 자리를 비웠을때, <-

이런 부분이라면 저장하는 시점에서 가용재고를 다시 확인해서 변경되면 처리해야 할꺼 같습니다.

그리고 제가 만들때는 실무 담당하시는 이사님께서 명확하게 재고의 할당은 오더 입력시간순으로 한다, 단 그 순서는 바꿀수 있어야 한다 라고 명시해줘서 큰 문제는 없었습니다.

그리고 오더수량의 변경이 있더라도 무조건 순서에 맞게 할당 되므로 2번째 오더는 재고할당 되더라도 처음 오더의 수량 변경에 의해 발주대기로 빠지게끔 했습니다.

제가 봐서는 실무 책임자분과

아 몰라 세크스!....;;

근데 개발환경은 뭔지 궁금하네요

전 델파이2010+mysql 5.1 + java + PHP 조합 이었는데 헤헤;;
뭐 프로그래밍은 모르겠지만 순차적으로 하면 될거같은데요...

재고량과 주문 그리고 주문시 재고량을 초과할경우 초과량을 예약으로 돌리는 식으로요.

추가주문시에는 처음 주문에서 추가주문수량만큼을 다시 현재 재고와 비교하고 현재 재고량 초과시 초과량을 예약으로 돌리는 방식

1.재고량 10
2.A주문 5
3.(10-5) 재고량 5
4.B주문 6
5(5-6=-1) 재고량 0, 예약 1
6.A추가 2
7.(-1-2) 재고량 0, 예약 3
이런식으로요...
한마디로 음수를 예약으로 돌리기...-ㅅ-';;
다른 쪽에서 가용재고 중 일부를 잡아 버리면 실제 가용재고가 부족해지는데
다시 돌아와 80에서 90개로 늘리는 시점에서 가용재고에 대한 재 확인은 진행이 되지 않는건가요?
단순히 본다면 (할당재고(기존)+가용재고 >= 수주수량 ) 이면 될것 같긴한데요
친구글 비밀글 댓글 쓰기

user error : Error. B.