1.웹 서버 소프트웨어(Apache, Nginx)는 OSI 7계층 중 어디서 작동하는지 설명해보세요.
웹 서버는 HTTP 프로토콜을 사용해 html 데이터를 클라이언트에 제공하는 서버입니다. 그리고 HTTP 프로토콜은 OSI 7계층인 Application Layer에 위치해 있습니다. 브라우저와 서버 사이에 정보를 주고받기 위해 사용하며, Apache, Nginx는 웹 서버 중의 하나이므로 Applicaion 계층에서 작동합니다.
2.웹 서버 소프트웨어(Apache, Nginx)의 서버 간 라우팅 기능은 OSI 7계층 중 어디서 작동하는지 설명해보세요.
라우터는 다른 네트워크와 통신하기 위해 사용하는 장치로, 현재의 네트워크에서 다른 네트워크로 패킷을 전송합니다. 따라서 서버 간 라우팅 기능은 네트워크 계층에서 동작합니다.
def solution(board, moves):
basket=[0] # 인형을 담는 바구니
cnt=0 # 인형이 터지는 횟수
for move in moves:
for i in range(len(board)):
if board[i][move-1]:
match=basket[-1]
basket.append(board[i][move-1])
board[i][move-1]=0
if match==basket[-1]:
basket=basket[:-2]
cnt+=1
break
return cnt*2
moves에 담긴 각 move마다 move가 0이 아닌 경우까지 갔을 때만
현재 바구니에 담긴 가장 마지막 인형을 match에 담고
바구니에 0이 아닌 인형의 값을 담고
다음에 바구니에 다시 접근할 수도 있기때문에 그 자리는 0으로 바꾸고
바구니에 담겼던 마지막 인형과 새로 담은 인형이 맞는 경우에 인형이 사라지므로 cnt+=1을 하고 해당 move에 대한 로직은 끝났기때문에 break로 for문을 빠져나와서 다음 move에 대한 로직을 시작한다
최종적으로 한번에 인형은 2개가 터지므로 *2를해서 리턴한다
🙋두 번째 for문에서 인형을 뽑는 깊이가 깊어질수록 계속 뽑은 자리를 0으로 치환하고 다음 번 moves에서 다시 같은 열을 조회할 때 board[0]부터 순차적으로 조회하는 비용을 index 마킹을 통해 줄일 수 있을 것 같습니다.
0을 넣어놓은 자리를 기억해두면 해당 라인에서 그 부분 이하로만 접근하면 되니까 표시해두면 좋겠다는 말인듯?
그럼 해당 [move-1]마다 i값을 기억해둬야하는데 ...
def solution(board, moves):
cols = list(map(lambda x: list(filter(lambda y: y > 0, x)), zip(*board)))
# zip(*board) = [(0, 0, 0, 4, 3), (0, 0, 2, 2, 5), (0, 1, 5, 4, 1), (0, 0, 0, 4, 3), (0, 3, 1, 2, 1)]
# cols = [[4, 3], [2, 2, 5], [1, 5, 4, 1], [4, 3], [3, 1, 2, 1]]
a, s = 0, [0]
for m in moves:
if len(cols[m - 1]) > 0:
if (d := cols[m - 1].pop(0)) == (l := s.pop()):
a += 2
else:
s.extend([l, d])
return a
첫번째 cols 이하 식에서
zip(*board)
는 board를 언패킹해서 언패킹한 n개의 리스트의 i번째 요소끼리 zip해줘서 행과 열을 바꿔주는 역할을 한다
lambda x: list(filter(lambda y: y > 0, x))
filter(함수, 리스트): 리스트 범위에서 함수에 해당하는 값만 뽑아낸다
list(filter(lambda x: x % 2, range(10)))
x를 2로 나눈 나머지가 0이면 false이기때문에 조건식을 만족하지 않게 되고 홀수인 경우 나머지가 1이기때문에 true가 돼서 리스트에 담긴다.
zip(*board)에의해 생성된 리스트에 대해서 map을 이용해 각 요소((0, 0, 0, 4, 3)과 같은 튜플)에 대해서 lamdba x식을 실행하고 그 열의 개별 요소들(0,0,0,4,3 각각)에 대해서는 lambda y가 실행되어 리스트에 담긴다
x에 대해서 0보다 큰 것만 살려놓으면 중간이 비어있으면 어떡하나 했는데 그런 경우가 없다는 가정인 것 같다. 안그럼 이 답안이 말이 안됨
https://wikidocs.net/64
반복문 이하에서