코드를 쓰면서 response를 찍어보고 데이터 구조를 파악하길 바란다. 그리고 왜 item_ids를 리스트 컴프리헨션을
사용해 짜게 되었는지 이해하길 바란다.
url = f'https://apis.zigbang.com/v2/items/oneroom?geohash={geohash}&depositMin=0&rentMin=0&salesTypes[0]=전세&salesTypes[1]=월세&domain=zigbang&checkAnyItemWithoutFilter=true'
response = requests.get(url)
item_ids = [data['itemId'] for data in response.json()['items']]
len(item_ids), item_ids[:5]
def check(index, arr):
len_arr = len(arr)
max_n = 0
for j in range(index, len_arr):
if j <= len_arr-2:
if arr[index] < max(arr[index : j+2]):
return max(arr[index : j+2])
else:
return -1
def solution(numbers):
answer = []
max_n = max(numbers)
for i in range(len(numbers)):
if (i == (len(numbers)-1)) or (numbers[i] == max_n):
answer.append(-1)
elif numbers[i] < numbers[i+1]:
answer.append(numbers[i+1])
elif numbers[i] >= numbers[i+1]:
answer.append(check(i, numbers))
return answer
10번 ~ 22번 문제 시간초과
def check(index, arr, n):
len_arr = len(arr)
max_n = 0
if index+n <= len_arr:
if arr[index] < max(arr[index : index+n]):
return max(arr[index : index+n])
else:
return check(index, arr, n+1)
else:
return -1
def solution(numbers):
answer = []
max_n = max(numbers)
for i in range(len(numbers)):
if (i == (len(numbers)-1)) or (numbers[i] == max_n):
answer.append(-1)
elif numbers[i] < numbers[i+1]:
answer.append(numbers[i+1])
elif numbers[i] >= numbers[i+1]:
answer.append(check(i, numbers, 1))
return answer
6번 ~ 22번 문제 시간초과
재귀가 더 시간을 많이 잡아먹음
구조적인 문제가 분명
마지막으로 구조는 그대로 가져가고
tru / except문을 활용해보았다.
def solution(numbers):
answer = []
max_n = max(numbers)
for i in range(len(numbers)):
if (i == (len(numbers)-1)) or (numbers[i] == max_n):
answer.append(-1)
elif numbers[i] < numbers[i+1]:
answer.append(numbers[i+1])
else:
for k in range(1, len(numbers[i:])+1):
try:
# print("try문 들어옴")
# print(i, numbers[i], k)
if numbers[i:].index(numbers[i]+k) >= 0:
answer.append(numbers[i]+k)
# print(answer)
check = 1
break
except:
check = 0
continue
if check == 0:
answer.append(-1)
return answer
잘못된 부분이 있는지 실패가 많이 떴다.
결국 찾아보고 stack 자료구조를 활용해 뒤에서부터 비교하는 방법으로 많이 풀이한 것을 알았다.
그래서 다음과 같이 풀이했다.
이 풀이에서 가장 중요한 부분은 앞에서 부터 비교하던걸 뒤에서 부터 비교하는 거라 생각한다.
앞에서 비교할 때는 내 다음것을 고려해야 되지만, 뒤로 비교하면 나보다 작다면 적용해주고 나보다 크다면 없애면 된다!
def solution(numbers):
n = len(numbers)
answer = [-1] * n # 정답을 -1로 초기화
stack = [] # 스택을 초기화
for i in range(n - 1, -1, -1): # 배열을 오른쪽에서 왼쪽으로 순회
# 현재 숫자보다 작은 숫자는 스택에서 제거
while stack and stack[-1] <= numbers[i]:
stack.pop()
# 스택이 비어 있지 않다면 스택의 맨 위가 '뒤에 있는 큰 수'
if stack:
answer[i] = stack[-1]
# 현재 숫자를 스택에 추가
stack.append(numbers[i])
return answer
만약 이해하기 어렵다면 다음 print문을 같이 사용하면 좋을거 같다.
def solution(numbers):
n = len(numbers)
answer = [-1] * n # 정답을 -1로 초기화
stack = [] # 스택을 초기화
for i in range(n - 1, -1, -1): # 배열을 오른쪽에서 왼쪽으로 순회
# 현재 숫자보다 작은 숫자는 스택에서 제거
print('index = ', i, 'stack =',stack, 'numbers =', numbers[i])
while stack and stack[-1] <= numbers[i]:
stack.pop()
print('stack pop')
# 스택이 비어 있지 않다면 스택의 맨 위가 '뒤에 있는 큰 수'
if stack:
answer[i] = stack[-1]
# 현재 숫자를 스택에 추가
stack.append(numbers[i])
print('answer - ',answer)
print('stack =',stack)
return answer
n = int(input())
rimbo = list(map(int, input().split()))
pass_check = True
for i in rimbo:
if (i <= 160):
print('I', i)
pass_check = False
break
if (pass_check == True):
print('P')
n = int(input())
if n>=200:
print('A')
elif n>=180:
print('B')
elif n>=150:
print('C')
else:
print('D')
조건문을 통해 범위를 지정하는것이 가장 효율적이라고 생각된다.
[008]
부모님의 키를 입력받으면 평균을 구해 자녀의 키를 예측하는 문제이다.
f, m = map(int, input().split())
print((f+m)//2)
소수점 아래는 버림으로 다음과 같이 간단하게 구할 수 있다
[009]
삼각형의 3각이 180이 되는지 확인하는 문제다
t1, t2, t3 = map(int, input().split())
if (t1 == 0) or (t2 == 0) or (t3 == 0):
print('F')
else:
if sum([t1, t2, t3]) == 180: #sum(iterable, start = n) 또는 sum(iterable)의 형태로 list로 묶어줘야 된다.
print('P')
else:
print('F')