TIL - 2022
[TIL 013] 20220320
바랄 희
2022. 3. 21. 01:45
01 | 알고리즘 문제 풀이
n,m = map(int,input().split())
arr_1 = [0]*10000000 #로봇 A의 시간별 위치
arr_2 = [0]*10000000 #로봇 B의 시간별 위치
a_time = 1
for i in range(n):
#시간과 방향 / 방향은 왼,오만 있음.
t,d = input().split()
t = int(t)
if d=="L":
dir_num = -1
else:
dir_num = 1
for j in range(t):
arr_1[a_time] = arr_1[a_time-1]+dir_num #이전 위치에서 dir_num만큼 더한다. 만약 이전 위치가 3이고 왼쪽으로 1칸이면 3 - 1 = 2 가 된다.
a_time+=1
b_time = 1
for i in range(m):
#시간과 방향 / 방향은 왼,오만 있음.
t,d = input().split()
t = int(t)
if d=="L":
dir_num = -1
else:
dir_num = 1
for j in range(t):
arr_2[b_time] = arr_2[b_time-1]+dir_num #이전 위치에서 dir_num만큼 더한다. 만약 이전 위치가 3이고 왼쪽으로 1칸이면 3 - 1 = 2 가 된다.
b_time+=1
if a_time < b_time:
min_time = a_time
max_time = b_time
max_arr = arr_2
min_arr = arr_1
else:
min_time = b_time
max_time = a_time
max_arr = arr_1
min_arr = arr_2
cnt=0
# 두 시간이 겹치는 지점까지는 우선 for 문을 사용하기
for i in range(2,min_time):
if arr_1[i-1]!=arr_2[i-1] and arr_1[i]==arr_2[i]:
cnt+=1
#arr는 아직 다 못 돈 배열
for i in range(min_time,max_time):
if min_arr[min_time-1]!=max_arr[i-1] and max_arr[i]==min_arr[min_time-1]:
cnt+=1
print(cnt)
해설과 길이 할당이 다르던데.. 그 이유에 대해서는 질문을 남겨뒀다 ..
n,m = map(int,input().split())
arr1 = [0]*1000000 #긱 인덱스는 시간!
arr2 = [0]*1000000
def move1(s,v,t):
#s는 시작점 v는 속도 t는 시간
idx = s
for i in range(t):
arr1[idx]=arr1[idx-1]+v
idx+=1
return idx
now = 1
for i in range(n):
v,t = map(int,input().split())
now = move1(now,v,t)
def move2(s,v,t):
#s는 시작점 v는 속도 t는 시간
idx = s
for i in range(t):
arr2[idx]=arr2[idx-1]+v
idx+=1
return idx
now = 1
for i in range(m):
v,t = map(int,input().split())
now = move2(now,v,t)
cnt=0
first = 0
def check(i):
global first
if arr1[i]>arr2[i]:
first = 1
elif arr1[i]<arr2[i]:
first = 2
else:
first = first
return first
# print(arr1[1:now])
# print(arr2[1:now])
for i in range(1,now):
temp_first = first
if arr1[i]!=arr2[i]:
first = check(i)
if temp_first!=0 and first!=temp_first:
cnt+=1
else:
continue
print(cnt)
02 | 서버리스 / 세션,쿠키,토큰
서버리스는 서버가 없다는 것이 아니라 서버에 대한 설정, 매니지먼트를 개발자가 직접 하지 않아도 된다는 것.
서버가 24/7 가동되는 것과 달리, 요청이 있을 때에만 함수를 작동시키는 방식.
장점은 함수가 작동 될 때에만 서버를 이용하기 때문에 값이 싸고 매니지먼트를 신경쓰지 않아도 되기에 빠른 출시가 가능.
단점은 함수를 깨우는 데에 오랜 시간이 걸리고 (서버리스가 아닌 경우에는 서버가 계속 가동되기에 호출되었을 시에 걸리는 시간이 없음), 서버에 의존적이게 된다는 것.
쿠키를 이용하여 서버는 브라우저에 데이터를 넣을 수 있음.
브라우저에 대한 서버의 응답에 쿠키가 있을 수 있음. 또한 브라우저의 요청에도 들어갈 수 있음. (기간과 브라우저가 한정적임)
세션 vs 토큰
브라우저가 서버에 요청을 보내면서 로그인을 하면, 세션 db에 이가 저장되고, 서버는 브라우저에 쿠키를 통해서 해당 세션 ID 를 보냄.
서버는 해당 쿠키를 통해서 세션 db를 보고 서버가 사용자를 식별해냄.
쿠키는 브라우저에만 있음. 이를 대신해서 쓰는 것이 토큰.
토큰은 그냥 string.
세션을 이용하면 모든 유저의 정보를 세션db에 저장해야 하는 것과는 달리 토큰을 이용하면 (JWT) db에 저장하지 않고 서버가 이가 유효한지 아닌지만 확인함.
03 | 스프링부트