[백준][Python] 1976번 여행 가자
·
백준/분리 집합
코드def solution(): n = int(input()) m = int(input()) global parent parent = [i for i in range(n)] for i in range(n): row = list(map(int, input().split())) for j in range(n): if row[j] == 1: union(i, j) plan = list(map(int, input().split())) root = find_parent(plan[0] - 1) for i in range(m): if find_parent(plan[i] - 1) != root: print("NO") return print..
[Java] 함수형 인터페이스 완전 정복 – 제네릭, 타겟 타입, 내장 함수형 인터페이스까지
·
Dev Lang/Java
Java 함수형 인터페이스 완전 정복 – 제네릭, 타겟 타입, 내장 함수형 인터페이스까지Java에서 함수형 프로그래밍의 핵심 요소는 단연코 함수형 인터페이스(Functional Interface) 입니다. 람다는 함수형 인터페이스를 통해 타입 추론, 호출 규칙, 문법적 간결성 등을 얻게 되며, Java 8 이후 다양한 내장 함수형 인터페이스도 함께 제공됩니다.이번 글에서는 다음의 7가지 주제를 중심으로 함수형 인터페이스를 깊이 있게 다룹니다. 1. 함수형 인터페이스와 제네릭 1 – 람다의 재사용성과 타입 유연성 확보함수형 인터페이스란?함수형 인터페이스(Functional Interface) 는 추상 메서드가 단 하나만 존재하는 인터페이스입니다. @FunctionalInterface 어노테이션을 붙여 의..
[백준][Python] 1027번 고층 건물
·
백준/구현
코드import sysdef can_see(x1, y1, x2, y2, x3, y3): giulgi = (y2 - y1) / (x2 - x1) return giulgi * (x3 - x1) + y1 > y3 def solution(): n = int(input()) count = [0 for _ in range(n)] li = list(map(int, input().split())) # n은 50보다 같거나 작은 자연수 n^2 가능할듯 for i in range(n - 1): for j in range(i + 1, n): flag = True ## 사이에 접하거나 막히는 건물이 있는지 확인 for s in range(i + 1, j): if..
[운영체제] 면접을 대비하는 뮤텍스와 세마포어의 차이
·
운영체제
뮤텍스(Mutex) vs 세마포어(Semaphore)핵심은 소유권과 접근 수량동시성 제어(concurrency control)는 다중 스레드 또는 다중 프로세스 환경에서 예측 가능한 동작을 보장하기 위한 핵심 과제입니다. 그 중에서도 뮤텍스와 세마포어는 고전적인 동기화 도구지만, 비슷해 보이는 개념 때문에 자주 혼동됩니다. 많은 책과 문서가 "락을 건다"는 수준에서 설명을 멈추지만, 실전에서는 더 분명한 구분이 필요합니다. 이 글에서는 소유권(Ownership) 과 접근 수량(Concurrency Count) 이라는 관점을 기준으로 뮤텍스와 세마포어를 명확히 구분해 설명합니다. 1. 왜 소유권과 접근 수량으로 구분해야 하는가?실무에서는 단순히 "동시 접근을 막기 위해 락을 건다"는 말로 설명이 부족합니..
[백준][Python] 202920번 영단어 암기는 어려워
·
백준/구현
코드import sysfrom collections import defaultdictinput = sys.stdin.readlinedef solution(): ## 1. 자주 나오는 언어일수록 앞에 배치 ## 2. 해당 언어의 길이가 길수록 앞에 배치 ## 3. 알파벳 사전순 answer = [] appear = defaultdict(int) n, m = map(int, input().split()) for _ in range(n): word = input().strip() if len(word) >= m: appear[word] += 1 sorted_li = sorted(appear.items(), key=lambda x: (-x[1], -len(x[0]), x[0..
[백준][Python] 23971번 ZOAC 4
·
백준/구현
코드def solution(): h, w, n, m = map(int, input().split()) row = w // (m + 1) if w % (m + 1) > 0: row += 1 col = h // (n + 1) if h % (n + 1) > 0: col += 1 print(row * col)solution() 풀이사람이 앉아야하는 좌석과 유지되어야하는 간격을 합쳐서 일렬로 최대로 나열할 수 있는 만큼 계산한다.한 행에 나열될 수 있는 사람 수를 계산한다.row = w // (m + 1)행의 마지막 사람은 오른쪽에 주어진 간격을 지킬 필요가 없으니 한 자리라도 남았다면 사람을 배치할 수 있다.if w % (m + 1) > 0: row += 1열도 이와 마찬가지로 계산..
[네트워크] 3-way Handshake
·
네트워크
TCP 연결은 어떻게 수립되는가 – 3-way Handshake 정리TCP는 신뢰성 있는 데이터 전송을 위해 연결 수립 전, 통신 쌍방 간 협상을 거치는 절차를 수행합니다.이를 3-way handshake 라고 부릅니다. 이름 그대로 3번의 패킷 교환을 통해 연결이 설정됩니다. 전체 흐름 요약1단계: 클라이언트 → 서버로 SYN 전송클라이언트는 연결을 요청하기 위해 SYN 플래그가 설정된 세그먼트를 서버에 전송합니다.이때 클라이언트는 CLOSED 상태에서 SYN-SENT 상태로 전환됩니다.이 요청에는 클라이언트의 초기 시퀀스 번호(ISN, Initial Sequence Number)가 포함됩니다. 2단계: 서버 → 클라이언트로 SYN-ACK 응답서버는 LISTEN 상태에서 클라이언트의 SYN을 수신하고..
[네트워크] 4-way Handshake
·
네트워크
4-way Handshake TCP 연결은 시작할 때도 복잡하지만, 끊을 때도 그만큼 절차가 필요합니다. 단순히 “연결 끊자” 하고 바로 종료되는 게 아니라, 양쪽이 모두 종료 의사를 밝히고, 이를 서로 확인하는 절차가 필요하죠. 바로 이것이 4-way handshake입니다. 4-way Handshake 과정1단계: 클라이언트가 먼저 연결 종료 요청애플리케이션이 더 이상 데이터를 보낼 필요가 없어지면, 클라이언트는 운영체제에게 "연결을 닫자"고 요청합니다. 그러면 클라이언트는 TCP 레벨에서 FIN 패킷을 서버에 전송합니다. 이 시점부터 클라이언트는 FIN-WAIT-1이라는 상태에 들어갑니다. 말 그대로 "FIN을 보냈고, 상대방의 반응을 기다리는" 상태죠.서버는 이 FIN 패킷을 받고 "알았어"라는..
개발자 성현
'분류 전체보기' 카테고리의 글 목록