[파이썬] 문제 : 짧은 프로젝트 A, 긴 프로젝트 B팀의 작업 할당
(문제)

샘플 데이터:
자료1
input
5
10 5 7 3 6
print
Team A run job4 need 3 day
Team B run job1 need 10 day
Team A run job2 need 5 day
Team A run job5 need 6 day
Team B run job3 need 7 day
자료2
input
8
13 7 4 10 6 9 6 8
print
Team A run job3 need 4 day
Team B run job1 need 13 day
Team A run job5 need 6 day
Team A run job7 need 6 day
Team B run job4 need 10 day
Team A run job2 need 7 day
Team A run job8 need 8 day
Team B run job6 need 9 day
자료3
input
4
1 2 3 4
print
Team A run job1 need 1 day
Team B run job4 need 4 day
Team A run job2 need 2 day
Team A run job3 need 3 day
자료4
input
8
4 6 13 9 6 10 7 8
print
Team A run job1 need 4 day
Team B run job3 need 13 day
Team A run job2 need 6 day
Team A run job5 need 6 day
Team B run job6 need 10 day
Team A run job7 need 7 day
Team A run job8 need 8 day
Team B run job4 need 9 day
자료5
input
7
4 3 2 12 15 8 10
print
Team A run job3 need 2 day
Team B run job5 need 15 day
Team A run job2 need 3 day
Team A run job1 need 4 day
Team A run job6 need 8 day
Team B run job4 need 12 day
Team A run job7 need 10 day
import codecs
import sys
sys.stdout = codecs.getwriter("utf-8")(sys.stdout.detach())
def Schedule(c, job, n, jid):
?????????????????????????????????????????
def bubble(n, job):
for i in range(n):
for j in range(n-1):
if(int(job[j]) > int(job[j+1])):
temp = job[j]
job[j] = job[j+1]
job[j+1] = temp
temp = jid[j]
jid[j] = jid[j+1]
jid[j+1] = temp
if __name__ == '__main__':
n = int(input())
job = list(map(str, input().rstrip().split()))
jid = []
for i in range(n):
jid.append(i+1)
bubble(n, job)
AWork = 0
BWork = 0
for i in range(n):
if AWork > BWork:
day, name = Schedule('B', job, n, jid)
BWork = BWork + int(day)
print("Team B run job"+str(name)+" need "+str(day)+" day ")
elif AWork < BWork:
day, name = Schedule('A', job, n, jid)
AWork = AWork + int(day)
print("Team A run job"+str(name)+" need "+str(day)+" day ")
else:
day, name = Schedule('A', job, n, jid)
AWork = AWork + int(day)
print("Team A run job"+str(name)+" need "+str(day)+" day "
(방법)
프로그램의 기본 전략을 작업을 오름차순으로 정렬해서 A는 앞에서부터(작업작업일) 하고,
B는 뒤에서부터(오래걸리는 작업일) 하는 겁니다.
Schedule 함수만 수정하면 문제가 됩니다. 아래 for 문제 2개가 있는데 모두 i를 사용합니다. 등등
올려주신 코드가 문제가 있어서 아래와 같이 수정 했습니다.
모든 입력 예시에 대해서 정확하게 결과가 나오는 것은 확인 했습니다.
import codecs
import sys
# sys.stdout = codecs.getwriter("utf-8")(sys.stdout.detach())
def Schedule(c, job, idx, jid):
rtnDay = 0
rtnName = ''
if c == 'A':
idx = idx
rtnName = c # rtnName은 그냥 c 로 해서 return해도 됩니다. 하가보니 특별한 것은 없는 것 같습니다.
rtnDay = job[idx] # A는 정렬된 작업의 앞에서부터 순차적으로 작업합니다.
elif c == 'B':
idx = idx
rtnName = c
rtnDay = job[-(idx+1)] # B는 정렬된 작업의 뒤에서부터 앞으로 순차적으로 작업 합니다.. 인덱스를 - 로 하면 뒤에서 번호 임.
return rtnDay, rtnName
def bubble(n, job):
for i in range(n):
for j in range(n-1):
if(int(job[j]) > int(job[j+1])):
temp = job[j]
job[j] = job[j+1]
job[j+1] = temp
# temp = jid[j]
# jid[j] = jid[j+1]
# jid[j+1] = temp
if __name__ == '__main__':
n = int(input())
job = list(map(str, input().rstrip().split()))
# n = 5 # 입력 예제들 입니다. 위의 입력 코드 라인을 주석처리 하고 테스트 하면 됩니다.
# job = [10, 5, 7, 3, 6]
# n = 8
# job = [13, 7, 4, 10, 6, 9, 6, 8]
# n = 4
# job = [1, 2, 3, 4]
# n = 8
# job = [4, 6, 13, 9, 6, 10, 7, 8]
# n = 7
# job = [4, 3, 2, 12, 15, 8, 10]
jid = []
bubble(n, job)
AWork = 0
BWork = 0
A_idx = 0
B_idx = 0
for i in range(n):
# jid.append(i+1)
# for i in range(n):
if AWork > BWork:
day, name = Schedule('B', job, B_idx, jid) # n 대신에 몇번째 작업인지(B_idx) 추가
B_idx += 1 # 몇 번째 작업인지 추가
BWork = BWork + int(day)
print("Team B run job"+str(name)+" need "+str(day)+" day ")
elif AWork < BWork:
day, name = Schedule('A', job, A_idx, jid)
A_idx += 1 # 몇 번째 작업인지 추가
AWork = AWork + int(day)
print("Team A run job"+str(name)+" need "+str(day)+" day ")
else:
day, name = Schedule('A', job, A_idx, jid)
A_idx += 1 # 몇 번째 작업인지 추가
AWork = AWork + int(day)
print("Team A run job"+str(name)+" need "+str(day)+" day ")