Python 코드 질문
조회수 474회
num_of_char, time_of_del = map(int, input().split())
time = list(map(int, input().split()))
inteval = []
def intevalCal(time):
n = -1
result = []
try:
for num in time:
n= n + 1
result.append(time[n+1]-time[n])
except IndexError:
result.append(time[n]-time[n-1])
return result
inteval = intevalCal(time)
def count(inteval, time_of_del):
try:
C = [x for x in inteval if x > time_of_del]
F = inteval.index(C[-1])
del inteval[:F+1]
return len([x for x in inteval if x <= time_of_del])
except IndexError:
return len([x for x in inteval if x <= time_of_del])
final = count(inteval, time_of_del)
print(final)
제가 문제 풀다가 예시를 실행 했는데 10개중에 3개가 오답이라고 뜨네요. 저는 문제점을 못찾겟는데 혹시 아시는분 있으면 댓 달아주세요ㅠㅠ
2 답변
-
문제가 어떤걸 요구하는지 모르겠어서 원하는 답을 모르겠는데요. 추측해보면 num_of_char만큼 시간 데이터를 받고 각 시간 데이터간의 차이를 저장한 inteval리스트 중에서 time_of_del보다 큰 값만 걸러낸 C리스트의 맨 마지막 숫자+1만큼의 값을 제거하고 그 리스트중에서 time_of_del보다 작은 값의 개수를 세는 문제인가요?
try: for num in time: n= n + 1 result.append(time[n+1]-time[n]) except IndexError: result.append(time[n]-time[n-1])
여기에서 n이 1부터 맨 끝값까지 커지면서 이전값과의 차이를 저장하고 n이 한번더 커지면 except IndedxError에 잡혀서 맨 끝값과 그 이전값의 차이를 한 번 더 저장하는데요.
그래서 만약에 3 5 6 8을 입력하면 [2 1 2 2]로 저장됩니다. 이게 의도하신게 아니라면
def intevalCal(time): n = -1 result = [] for i in range(1,len(time)): result.append(time[i]-time[i-1]) return result
이렇게 수정하시고 확인해주세요
num_of_char, time_of_del = map(int, input().split()) time = list(map(int, input().split())) inteval = [] def intevalCal(time): n = -1 result = [] for i in range(1,len(time)): result.append(time[i]-time[i-1]) print(time[i],'-',time[i-1],end=' / ') print() return result inteval = intevalCal(time) print(inteval) def count(inteval, time_of_del): try: C = [x for x in inteval if x > time_of_del] print('C=',C) print(inteval,end=' ') F = inteval.index(C[-1]) print('-',inteval[:F+1]) del inteval[:F+1] print('=',inteval) print('[x for x in inteval if x <= time_of_del]=',[x for x in inteval if x <= time_of_del]) return len([x for x in inteval if x <= time_of_del]) except IndexError: return len([x for x in inteval if x <= time_of_del]) final = count(inteval, time_of_del) print(final)
위는 과정 확인용 코드입니다. 혹시 문제를 알려주시면 더 자세히 알려드리겠습니다.
-
(•́ ✖ •̀)
알 수 없는 사용자
- 우선 첫 파트는 제가 의도한게 맞아요!! 문제는 inteval이 나오는데 inteval중에 time_of_del보다 작은게 있으면 그 전에 있던것도 같이 없어지고 연속적으로 time_of_del보다 작거나 같은 개수를 구하는 문제입니다 Park Jong Yeon 2019.10.15 18:49
-
-
첫번째 이슈가 의도하신거라고 하셔서 맨 뒤에 추가되는 값을 한번 더 넣었구요
제가 이해한대로는 time_of_del보다 작은 것을 찾고 맨 뒤에 찾은 값 이전의 값을 모두 지운 뒤에 time_of_del보다 작거나 같은 개수를 구하는 것으로 생각했는데요.
time_of_del보다 작은 inteval값 중에 맨 뒤에 있는 값을 기준으로 이전의 값을 제거하면 time_of_del보다 작거나 같은 값을 찾을 수가 없게 되므로 맨 처음 발견하자마자 이전의 값을 삭제해봤습니다. 맨 뒤의 값을 찾으시려면 주석으로 둘러쌓인 뒤부터 탐색하는 for문을 이용해주시고요.
그 다음에 추려진 리스트 중에서 time_of_del보다 작거나 같은 값을 연속으로만 세는지 모두 세는지 이해를 못해서 모두 세봤습니다.
num_of_char, time_of_del = map(int, input().split()) time = list(map(int, input().split())) inteval = [] def intevalCal(time): n = -1 result = [] for i in range(1,len(time)): result.append(time[i]-time[i-1]) print(time[i],'-',time[i-1],end=' / ') result.append(time[-1]-time[-2]) print() return result inteval = intevalCal(time) print(inteval) def count(inteval, time_of_del): #맨 뒤부터 확인하기 #for i in range(len(inteval)-1,-1,-1): # if inteval[i] < time_of_del: # inteval=inteval[i+1:] # break #맨 앞부터 확인하기 for i in inteval: if i < time_of_del: print(i,'<',time_of_del) inteval=inteval[i+1:] break #inteval의 값이 없으면 종료하기 if len(inteval)==0: return 0 print('inteval=>',inteval,' / del=>',time_of_del) return len([x for x in inteval if x <= time_of_del]) final = count(inteval, time_of_del) print(final)
이 코드대로 확인해보시고 테스트케이스랑 답이 같다면 중간의 주석이랑 print문은 지워주시면 되겠습니다. 감사합니다.
-
(•́ ✖ •̀)
알 수 없는 사용자
- 연속적으로 세야합니다! 그리고 그 입력값이 num_of_char =1, time_of_del =1, time= 1000000000일때 인덱스 에러가 나는데 어떻게 처리 해야 할까요? Park Jong Yeon 2019.10.16 22:27
- 타임 리스트에 값이 한개밖에 없으면 인덱스가 0까지 밖에 없어서 for i in range(1,len(time)): 부분이 아예 시작이 안되고 끝나니까 result = []로 선언된 상태로 반환되면서 인터벌 리스트엔 요소가 없는 상태같네요 그래서 빈 리스트의 값을 불러오니까 인덱스 오류가 난 것 같습니다. 알 수 없는 사용자 2019.10.19 02:32
-
댓글 입력