# you can write to stdout for debugging purposes, e.g.
# print("this is a debug message")
def solution(A, B):
# write your code in Python 3.6
if len(A) == 1:
return 1
arr = []
for i in range(len(A)):
arr.append((A[i],B[i]))
arr_ = []
arr_.append(arr[0])
for i in range(1,len(arr)):
# 충돌하면
while(True):
if arr[i][1] == 0 and arr_[len(arr_)-1][1] == 1:
# 기존 물고기가 더 쎄면
if arr[i][0] < arr_[len(arr_)-1][0]:
break
# 새로운 물고기가 더 쎄면
else:
del arr_[len(arr_)-1]
else:
arr_.append(arr[i])
break
return len(arr_)
pass
처음으로 시도했을때, 정확도는 --> 75%가 나왔다ㅠㅠㅠ
어디서 에러가 발생했는지 확인해보니
모두 한방향으로 가고, 하나의 물고기가 다른 방향으로 갈 때,
Runtime Error가 발생하고 있었다.
# you can write to stdout for debugging purposes, e.g.
# print("this is a debug message")
def solution(A, B):
# write your code in Python 3.6
if len(A) == 1:
return 1
arr = []
for i in range(len(A)):
arr.append((A[i],B[i]))
arr_ = []
arr_.append(arr[0])
for i in range(1,len(arr)):
# 충돌하면
while(True):
if arr[i][1] == 0 and arr_[len(arr_)-1][1] == 1:
# 기존 물고기가 더 쎄면
if arr[i][0] < arr_[len(arr_)-1][0]:
break
# 새로운 물고기가 더 쎄면
else:
del arr_[len(arr_)-1]
if len(arr_) == 0:
arr_.append(arr[i])
break
else:
arr_.append(arr[i])
break
return len(arr_)
pass
# you can write to stdout for debugging purposes, e.g.
# print("this is a debug message")
def solution(S):
# write your code in Python 3.6
if len(S) == 0:
return 1
arr = []
for i in S:
if i == "{":
arr.append(3)
elif i == "[":
arr.append(2)
elif i == "(":
arr.append(1)
elif i == ")":
arr.append(-1)
elif i == "]":
arr.append(-2)
elif i == "}":
arr.append(-3)
arr_ = []
arr_.append(arr[0])
for i in range(1,len(arr)):
if len(arr_) != 0 and arr[i] < 0 and arr[i] == -1 * arr_[len(arr_)-1]:
del arr_[len(arr_)-1]
else:
arr_.append(arr[i])
if len(arr_) == 0:
return 1
else:
return 0
pass
Triangle 이라는 문젠데, 배열 안에 3개의 수가 아래의 조건을 만족하는 지의 여부를 묻는 문제다.
A[i] + A[j] > A[k]
A[j] + A[k] > A[i]
A[i] + A[k] > A[j]
(단, 0< i,j,k < N)
최대한 for 문을 안쓰고 싶은데, 어떻게 해야할까..
for 문 3개 쓰니깐, 마지막 3문제는 Timeout Error가 발생했다.ㅜㅜ
시간 복잡도:O(N**3)--> 81%의 정답률
# you can write to stdout for debugging purposes, e.g.
# print("this is a debug message")
def solution(A):
# write your code in Python 3.6
A = sorted(A)
for i in range(len(A)):
for j in range(i+1,len(A)):
for k in range(j+1,len(A)):
if A[i] + A[j] <= A[k]:
break
else:
if is_triangular(A[i],A[j],A[k]) == 1:
return 1
return 0
pass
def is_triangular(a,b,c):
if a+b > c and a+c > b and b+c > a:
return 1
else:
return 0
크기에 따라서 오름차순으로 정렬하고,
for문 하나로 문제를 푸니 풀렸다!!
ex) 1,2,5,8,10,20 로 정렬을 하면,
a < b < c이렇게 정렬이 될때,
일단 a + c > b 는 당연한 사실 c가 b 보다 크기 때문에.
그리고 c + b > a도 당연한 사실 c,b가 a보다 크기 때문에,
그러므로 a + b > c 인지만 확인하면 됨.
시간 복잡도:O(N*log(N))--> 100%의 정답률
# you can write to stdout for debugging purposes, e.g.
# print("this is a debug message")
def solution(A):
# write your code in Python 3.6
A = sorted(A)
for i in range(len(A)-2):
if A[i] + A[i+1] > A[i+2]:
return 1
return 0
pass
# you can write to stdout for debugging purposes, e.g.
# print("this is a debug message")
def solution(A):
# write your code in Python 3.6
count = 0
for i in range(len(A)):
for j in range(i+1,len(A)):
tmp = i+A[i]
tmp2 = j-A[j]
if tmp2 <= tmp:
count += 1
return count
pass
구글링한 코드: 시간 복잡도:O(N*log(N)) or O(N)--> 100%의 정답률
# you can write to stdout for debugging purposes, e.g.
# print("this is a debug message")
def solution(A):
# write your code in Python 3.6
arr = []
for i,v in enumerate(A):
arr.append((i+v,1))
arr.append((i-v,-1))
arr.sort()
intersect = 0
intervals = 0
for i,v in enumerate(arr):
if v[1] == 1:
intervals -= 1
if v[1] == -1:
intersect += intervals
intervals += 1
if intersect > 10000000:
return -1
return intersect
pass
ㅜㅜ 열심히 풀려고 해보았지만, 생각보다 다른 접근 방법이 생각이 나지 않아 골머리를 앓았다.
# you can write to stdout for debugging purposes, e.g.
# print("this is a debug message")
def solution(A):
# write your code in Python 3.6
A = sorted(A, reverse=True)
if A[0]*A[1]*A[2] > A[0]*A[-1]*A[-2]:
return A[0]*A[1]*A[2]
else:
return A[0]*A[-1]*A[-2]
pass
# you can write to stdout for debugging purposes, e.g.
# print("this is a debug message")
def solution(A):
# write your code in Python 3.6
if len(A) == 0:
return 0
B = set(A)
return len(B)
pass