CS기초 23

LeetCode #424

https://leetcode.com/problems/longest-repeating-character-replacement/description/ Longest Repeating Character Replacement - LeetCode Level up your coding skills and quickly land a job. This is the best place to expand your knowledge and get prepared for your next interview. leetcode.com 제일 속도가 빠른 해답은 이건 데, count[s.charAt(start) - 'A']--해도 maxCount가 계산되는 것이 아직 이해가 안간다. class Solution { public in..

[그림으로 배우는 네트워크 원리] 7장. 네트워크 보안 기술

인증과 암호화 네트워크 데이터를 악의적인 사용자로부터 보호하기 위해서 인증과 암호화를 사용한다. 인증은 쉽게 말해 로그인한 사람만 접속할 수 있게 하는 것이다. 이렇게 함으로서 데이터에 접근하는 것을 막는다. 암호화는 데이터를 도청해도 해석할 수 없도록 비밀메시지로 만드는 것을 말한다. 암호화 공통키 암호 방식 키 하나로 암복호화를 수행한다. 키가 하나이기 때문에 장기간 사용할 경우, 어떤 규칙성으로 인해 암호가 해독될 수 있다. 또, 키를 상대에게 배송해야 하는 문제가 있다. 공통키 암호 알고리즘에는 3DES와 AES가 있다. 현재는 AES가 널리 사용되고 있다. 공개키 암호 방식 공개키와 비밀키 2개를 두어, 공개키로 암호화하면 비밀키로 복호화하고, 비밀키로 암호화하면 공개키로 복호화할 수 있게 한..

[그림으로 배우는 네트워크 원리] 6장. 라우팅

라우터 라우터는 인터넷 계층(L3)의 데이터를 통신하는 장치다. 라우터로 도착하는 이더넷프레임의 도착지MAC주소는 라우터의 것인데, 도착지IP주소는 정말 도착지 IP 주소다. 왜냐면, L2는 같은 네트워크 내의 데이터만 통신할 수 있고, L3는 다른 네트워크 간의 데이터를 통신할 수 있기 때문이다. 라우터는 IP패킷의 목적지 주소와 라우팅 테이블을 참고하여 IP패킷이 전송되어야 할 곳을 정한다. 라우터는 스위치와 달리 목적지IP주소를 모르면 폐기한다. 라우터는 IP패킷이 전송되어야 할 곳을 확인하고, 이곳의 MAC주소를 확인해서 이더넷프레임을 새로 만는다. 라우터로 들어오는 이더넷 프레임은 라우터를 나가는 이더넷 프레임과 목적지 MAC이 다르다. 라우팅 테이블에는 네트워크 주소에 대한 라우터 주소 또는..

[그림으로 배우는 네트워크 원리] 5장. 이더넷과 무선 LAN

L2 스위치 L2는 네트워크 인터페이스 레이어를 말한다. L2스위치는 네트워크 인터페이스 레이어 내부의 통신을 담당 이더넷/무선 LAN을 이용해서 같은 네트워크 하나를 구성 여러 대의 L2 스위치가 있어도 L2 스위치로 연결된 네트워크는 하나임 네트워크에 접속하기 위해서 L2 스위치 접속부터 시작하기 때문에 "엑세스 스위치"라고 부르기도 한다. L2스위치의 연결을 구성하는 토폴로지에는 버스, 스타, 링형 등이 있다. 이더넷과 무선LAN L2의 주요 프로토콜은 이더넷, 무선 LAN이 있다. 이더넷 이더넷 인터페이스와 이더넷 인터페이스 간 유선 LAN으로 통신한다. 전송되는 데이터는 이더넷 프레임이며, 아래와 같은 규격이다. 이더넷 프레임 = 이더넷헤더(목적지 MAC 주소, 출발지 MAC 주소, 타입코드..

[그림으로 배우는 네트워크 원리] 4장. 웹사이트의 동작 원리

URL에 담긴 정보: 프로토콜 + 호스트명 + 리소스경로 예: https://comic.naver.com/index https 프로토콜 : 파일의 장소 // 파일의 장소로 호스트명이 올거야 comic.naver.com 호스트명 /index 리소스 위치 웹 브라우저에  www.naver.com을 입력하면 생기는 일 목적지 서버와 통신하려면, 목적지 IP/MAC주소를 알아야 함 IP 주소는 뭐야? DNS 쿼리 요청을 보낸다 웹 브라우저 캐시 확인 → 있으면 쓴다. 없으면 DNS Resolver의 캐시 확인 → 있으면 쓴다. 없으면 DNS Resolver는 Root DNS 서버에게 물어본다. Root DNS 서버는 제일 뒤에 있는 com에 대한 네임 서버를 알려준다. DSN Resolver는 com 네임 ..

[그림으로 배우는 네트워크 원리] 2장. 네트워크를 만드는 것

2.1 인터넷 연결이 된다는 것: LAN 구축 KT의 LAN선을 외부에서 끌어와서 KT 라우터에 연결한다. 유선 LAN(이더넷)을 이용하기 위해 LAN선이 필요하다. 준비한 LAN선의 한 쪽 LAN 포트를 KT 라우터의 LAN 포트에 꽂고 반대쪽 LAN 포트를 PC의 LAN 포트에 꽂는다. 무선 LAN(와이파이)을 이용하기 위해 LAN선과 공유기가 필요하다. LAN선으로 KT 라우터와 와이파이공유기를 연결한다. 와이파이공유기의 무선 LAN 인터페이스와 노트북, 스마트폰의 무선 LAN 인터페이스가 전자파를 통해 전달되어 인터넷을 쓸 수 있다. 2.2 네트워크 구성과 관련된 용어 인터페이스: 물리신호(pulse)와 디지털신호(0101)의 경계. 인터페이스를 통해 물리신호가 디지털신호로 변환되어 들어오고, 디..

[그림으로 배우는 네트워크 원리] 1장. 네트워크의 기본

1.1 네트워크의 분류 네트워크를 접근할 수 있는 권한이 필요한 지에 따라 public/private 네트워크로 나뉜다. 네트워크를 구성하는 범위에 따라 LAN/WAN으로 나뉜다. 1.2 인터넷 인터넷 접속이 가능한 이유: ISP(Internet Service Provider)들에 의해 전 세계 네트워크가 연결될 수 있다. ISP의 예: KT같은 통신사업자, Amazon같은 인터넷 서비스 기업 집에서 KT인터넷을 계약: ISP인 KT의 라우터에 접속할 수 있게 되어 인터넷을 이용할 수 있다. 1.3 통신 애플리케이션은 네트워크를 통해 데이터를 주고 받는다. 애플리케이션의 역할이 서버인 지, 클라이언트인 지에 따라 통신 방법을 구분할 수 있다. 클라이언트-서버 애플리케이션: 클라이언트 서버를 통해 데이터..

LeetCode 1209 (Easy) Remove All Adjacent Duplicates in String II

출처: leetcode.com/problems/remove-all-adjacent-duplicates-in-string-ii/ 문제 한글 번역은 아래 더보기를 클릭해주세요. 더보기 풀이 class Solution: def removeDuplicates(self, s: str, k: int) -> str: # 문자열의 길이가 k보다 작은 경우, k만큼 중복되는 문자는 없으므로 바로 반환 if len(s) < k: return s stack = [] dupStr = '' dupCnt = 0 # 중복이 있는 지 검사하고 # 중복된 문자열을 삭제 for c in s: stack.append(c) # 문자열이 다르면 dupCtn 1로 리셋 if (dupStr != c): dupCnt = 1 dupStr = c e..

LeetCode 20 (Easy) Valid Parentheses

출처: leetcode.com/problems/valid-parentheses/ 문제 한글 번역은 아래 더보기를 클릭해주세요. 더보기 풀이 class Solution: def isValid(self, s: str) -> bool: stack = [] top = '' for b in s: # 열렸으면 push # 닫혔으면 탑과 비교하고, 짝이 맞으면 pop 짝이 안 맞으면 true if b == '(' or b == '[' or b == '{': stack.append(b) top = b elif (b == ')' and top == '(') or (b == ']' and top == '[') or (b == '}' and top == '{'): stack.pop() top = stack[-1] if le..

LeetCode 232 (Easy) Implement Queue using Stacks

출처: leetcode.com/problems/implement-queue-using-stacks/ Implement Queue using Stacks - LeetCode Level up your coding skills and quickly land a job. This is the best place to expand your knowledge and get prepared for your next interview. leetcode.com 문제 한글 번역은 아래 더보기를 클릭해주세요. 풀이 class MyQueue: def __init__(self): """ Initialize your data structure here. """ self.stack = list() def push(self, x: ..