목록분류 전체보기 (768)
우노
문제 오늘 동빈이는 여행 가신 부모님을 대신해서 떡집 일을 하기로 했다. 오늘은 떡볶이 떡을 만드는 날이다. 동빈이네 떡볶이 떡은 재밌게도 떡볶이 떡의 길이가 일정하지 않다. 대신에 한 봉지 안에 들어가는 떡의 총 길이는 절단기로 잘라서 맞춰준다. 절단기에 높이(H)를 지정하면 줄지어진 떡을 한 번에 절단한다. 높이가 H보다 긴 떡은 H 위의 부분이 잘릴 것이고, 낮은 떡은 잘리지 않는다. 예를 들어 높이가 19, 14, 10, 17cm 인 떡이 나란히 있고 절단기 높이를 15cm로 지정하면 자른 뒤 떡의 높이는 15, 14, 10, 15cm가 될 것이다. 잘린 떡의 길이는 차례대로 4, 0, 0, 2cm이다. 손님은 6cm만큼의 길이를 가져간다. 손님이 왔을 때 요청한 총 길이가 M일 때, 적어도 M만..
문제 동빈이네 전자 매장에는 부품이 N개 있다. 각 부품은 정수 형태의 고유한 번호가 있다. 어느 날 손님이 M개의 종류의 부품을 대량으로 구매하겠다며 당일 날 견적서를 요청했다. 동빈이는 때를 놓치지 않고 손님이 문의한 부품 M개 종류를 모두 확인해서 경적서를 작성해야 한다. 이때 가게 안에 부품이 모두 있는지 확인하는 프로그램을 작성해보자. 예를 들어 가게의 부품이 총 5개일 때 부품 번호가 다음과 같다고 하자. N = 5 [8, 3, 7, 9, 2] 손님은 총 3개의 부품이 있는지 확인 요청했는데 부품 번호는 다음과 같다. M = 3 [5, 7, 9] 이때 손님이 요청한 부품 번호의 순서대로 부품을 확인해 부품이 있으면 yes를, 없으면 no를 출력한다. 구분은 공백으로 한다. 입력 조건 첫째 줄에..
들어가기 앞서, 입력 데이터의 개수가 많은 문제를 풀 때, input() 함수를 사용하면, 동작 속도가 느려서 시간 초과로 인한 오답 판정을 받을 수 있습니다. 따라서, 입력 데이터가 많은 문제에는, sys 라이브러리의 readline() 함수를 이용해 시간 초과를 피할 수 있습니다. sys 라이브러리를 사용할 때는, 한 줄을 입력 받고 나서, 반드시 rstrip() 함수를 호출해야합니다. sys.stdin.readline() 으로 입력을 받으면, 입력 후 엔터가 줄 바꿈 기호로 입력되는데, 이 공백 문자를 제거하려면 rstrip() 함수를 사용해야합니다. 예제 코드 한 개의 정수 입력 받기 import sys a = int(sys.stdin.readline().rstrip()) 공백 기준으로 분리된 여..
VSCode for mac 설치 및 환경 설정 먼저, 아래 링크로 들어가서 VSCode for mac을 다운 받고 실행합니다. https://code.visualstudio.com/ 왼쪽 메뉴의 네모네모난 아이콘을 클릭해, Extension Marketplace 로 들어갑니다. 텅빈 껍데기 뿐인 VSCode에 여러가지 기능을 추가할 수 있는 플러그인들이 모여있는 곳입니다. Python 을 검색해서, Microsoft의 Python Extension을 install 합니다. .py 파일 생성 및 실행 상단 [File] 메뉴에서 [Open Folder]를 클랙해 작업 폴더를 지정하고, 새로운 .py 파일을 생성합니다. 간단한 코드를 작성한 뒤, 우측 클릭 후, [Run Python File in Termin..
문제 이미 정렬된 데이터 중에서 특정 원소가 몇 번째 위치에 존재하는지 출력하시오. 입력 예시 10 7 1 3 5 7 9 11 13 15 17 19 10 7 1 3 5 6 9 11 13 15 17 19 출력 예시 4 원소가 존재하지 않습니다. 풀이 탐색 시작 위치와 탐색 종료 위치를 반복적으로 좁혀가며, 중간값과 탐색값을 비교하면 됩니다. 또한, start 가 end 보다 커졌을때를 탐색 불가능으로 판단하면 됩니다. 예제 코드 # n(원소의 개수)과 search(찾고자 하는 값)를 입력 받기 n, search = map(int,input().split()) # 전체 원소 입력 받기 n_list = list(map(int,input().split())) def binary_search(start, end)..
들어가기 앞서, 3-Way Handshaking 과정은, TCP 프로토콜 통신을 ‘연결’하기 위한 과정이고 4-Way Handshaking 과정은, TCP 프로토콜 통신을 ‘종료’하기 위한 과정입니다. 3-Way Handshaking 패킷을 전송하기 전, TCP는 연결지향형 프로토콜이기 때문에, 송신측과 수신측이 서로 연결되는 작업이 필요합니다. 이러한 작업을 3 Way Handshaking 이라고 부릅니다. 3 Way Handshaking 을 수행하기 위해서는, TCP 헤더에 표시한 플래그들이 사용되며, 이러한 플래그들을 컨트롤 비트라고 부릅니다. 3 Way Handshaking 은 SYN(동기화) 과 ACK(승인) 로 진행됩니다. 먼저, 클라이언트는 서버에게, 접속을 요청하는 SYN 패킷을 보냅니다...
들어가기 앞서, 만약, www.google.com 을 웹 브라우저에 입력하면 무슨 일이 일어날까요? 구글 웹서버에 80번 포트로 HTTP Request 를 보낸다는 의미와 동일합니다. 해당 포스팅에선, 웹 요청 및 응답의 흐름을 간단하게 요약하고, 자세한 내용까지 다뤄보겠습니다. 흐름 간단 요약 www.google.com 을 브라우저 주소창에 입력합니다. 보낼 패킷의 HTTP 헤더는, HTTP Request 를 통해 채워진 상태입니다. 보낼 패킷의 IP 헤더를 채우기 위해, DNS 서버를 통해 www.google.com 도메인의 IP 주소를 응답 받습니다. 보낼 패킷의 TCP 헤더를 채우기 위해, 클라이언트와 구글 웹서버 간 TCP 연결을 합니다. 3-Way Handshaking 보낼 패킷이 완성되었으므..
패킷 통신이란? 데이터를 패킷이라고하는 작은 단위로 나누어 전송하는 방식을 의미합니다. IP (Internet Protocol) 란? IP는, 패킷 데이터들을 최대한 빨리 특정 목적지 주소로 보내는 프로토콜입니다. 빨리 보내는게 목적이기 때문에, 패킷 전달 여부를 보증하지 않으며, 패킷을 보낸 순서와 받는 순서가 다를 수 있습니다. TCP (Transmission Control Protocol) 란? 패킷 통신은, 데이터를 작은 단위로 나누어 전송하기 때문에, 순서가 뒤섞이거나 내용이 유실될 수 있다는 단점이 있습니다. 따라서, 이러한 문제를 해결하기 위해 TCP 라는 프로토콜이 존재합니다. TCP는, 패킷을 정상적으로 받을 수 있도록 하는 프로토콜입니다. 꼼꼼하게 보내는게 목적이기 때문에, IP 보다 ..
문제 동빈이는 두 개의 배열 A와 B를 가지고 있다. 두 배열은 N개의 원소로 구성되어 있으며, 배열의 원소는 모두 자연수이다 동빈이는 최대 K 번의 바꿔치기 연산을 수행할 수 있는데, 바꿔치기 연산이란 배열 A에 있는 원소 하나와 배열 B에 있는 원소 하나를 골라서 두 원소를 서로 바꾸는 것을 말한다. 동빈이의 최종 목표는 배열 A의 모든 원소의 합이 최대가 되도록 하는 것이며, 여러분은 동빈이를 도와야한다. N, K, 그리고 배열 A와 B의 정보가 주어졌을 때, 최대 K 번의 바꿔치기 연산을 수행하여 만들 수 있는 배열 A의 모든 원소의 합의 최댓값을 출력하는 프로그램을 작성하시오. 예를 들어 N = 5, K = 3이고, 배열 A와 B가 다음과 같다고 하자. 배열 A = [1, 2, 5, 4, 3] ..
문제 N명의 학생 정보가 있다. 학생 정보는 학생의 이름과 학생의 성적으로 구분된다. 각 학생의 이름과 성적 정보가 주어졌을 때 성적이 낮은 순서대로 학생의 이름을 출력하는 프로그램을 작성하시오. 입력 조건 첫 번째 줄에 학생의 수 N이 입력된다. (1