개발/python
Train Timetable
Dsp
2009. 8. 22. 01:03
이번에는 두번째 문제인 기차시간표입니다.
문제는 다음과 같습니다.
제일 가까운 기차들을 모두 이어주고,
앞뒤로 이어지지 않은 기차들을 카운트해주면 됩니다.
소스코드는 다음과 같습니다.
실행결과는 다음과 같으며, 모두 Correct입니다.
문제는 다음과 같습니다.
제일 가까운 기차들을 모두 이어주고,
앞뒤로 이어지지 않은 기차들을 카운트해주면 됩니다.
소스코드는 다음과 같습니다.
- import sys
- import datetime
- class train:
- def __init__(self, row, dir):
- st = row.split(' ')[0]
- end = row.split(' ')[1]
- self.start = datetime.datetime( 2009,1,1, int(st.split(':')[0]), int(st.split(':')[1]) )
- self.end = datetime.datetime( 2009,1,1, int(end.split(':')[0]), int(end.split(':')[1]) )
- self.dir = dir
- self.reserved1 = 0
- self.reserved2 = 0
- def asc_start(a,b):
- if a.start < b.start:
- return -1
- else:
- return 1
- def desc_end(a,b):
- if a.end < b.end:
- return 1
- else:
- return -1
- if __name__=="__main__":
- if len(sys.argv)>1:
- inp = sys.argv[1]
- else:
- print "append an input file param"
- sys.exit()
- f = open( inp, 'rt' )
- nTC = int( f.readline() )
- print 'the number of tc :', nTC
- output_file = inp.split('.')[0]+"_output.txt"
- fout = open( output_file, 'wt')
- for i in range(0,nTC):
- turnaround = int( f.readline() )
- NA_NB = f.readline()
- NA = int( NA_NB.split(' ')[0] )
- NB = int( NA_NB.split(' ')[1] )
- trains = []
- for n in range(0,NA):
- row = f.readline()
- trains.append( train( row, 'A' ) )
- for n in range(0,NB):
- row = f.readline()
- trains.append( train( row,'B') )
- trains.sort(desc_end)
- #process
- ta = datetime.timedelta( 0, turnaround*60 )
- for t1 in trains:
- if t1.reserved2>0: continue
- cands = []
- for t2 in trains:
- if t2.reserved1>0: continue
- if ( t1.end + ta <= t2.start ) and (t1.dir != t2.dir):
- cands.append( t2 )
- if cands:
- cands.sort( asc_start )
- min = cands[0]
- #print t1.start, t1.end, t1.dir
- #print '\t',min.start, min.end, min.dir
- t1.reserved2 = min.reserved1 = 1
- NA = NB = 0
- for t in trains:
- if t.reserved1==0:
- if t.dir=='A':
- NA+=1
- else:
- NB+=1
- # result
- print 'Case #'+str(i+1)+':' ,NA, NB
- fout.write( 'Case #'+str(i+1)+': ' +str(NA) + ' '+str( NB)+'\n')
- f.close()
- fout.close()
실행결과는 다음과 같으며, 모두 Correct입니다.