두 개의 정수 n과 k가 주어졌을 때, 1부터 n까지의 숫자 중에서 k개를 선택하여 만들 수 있는 모든 조합을 찾는 문제입니다.예를 들어 n = 4, k = 2라면 다음과 같은 조합들이 만들어집니다.[[1,2], [1,3], [1,4], [2,3], [2,4], [3,4]]이 문제는 대표적인 백트래킹(Backtracking) 기법으로 해결할 수 있습니다. 아래에서 풀이 과정과 C++ 구현 예제를 살펴보겠습니다.풀이 접근 방법재귀 함수 solve()를 사용합니다. 이 함수는 n, k, 임시 배열(temp), 시작 위치(start)를
A부터 Z까지의 알파벳으로 이루어진 메시지가 다음과 같은 매핑 규칙을 사용해 숫자로 인코딩되어 있다고 가정해 보겠습니다 — A → 1, B → 2 ... Z → 26. 이때 숫자로만 구성된 비어 있지 않은 문자열이 하나 주어지면, 해당 문자열을 디코딩할 수 있는 총 경우의 수를 구해야 합니다.예를 들어 문자열이 12라면, 이는 AB(1, 2) 또는 L(12)로 해석될 수 있으므로 가능한 디코딩 방법은 두 가지입니다. 따라서 정답은 2가 됩니다.문제 해결 접근 방식이 문제는 동적 계획법(Dynamic Programming)을 활용하면
문제 개요이진 트리(binary tree)가 하나 있다고 가정해 보겠습니다. 우리는 재귀(recursion)를 사용하지 않고 중위 순회(inorder traversal) 방식으로 이 트리를 순회해야 합니다.예를 들어 트리가 다음과 같다면,중위 순회 결과는 [2, 5, 7, 10, 15, 20]이 됩니다.접근 방법: 스택을 활용한 반복적 순회재귀 대신 스택(stack)을 활용하면 반복문만으로 중위 순회를 구현할 수 있습니다. 핵심 아이디어는 왼쪽 자식을 따라 내려가면서 지나온 노드들을 스택에 저장해 두었다가, 더 이상 왼쪽으로 갈 수
비어 있지 않은 문자열 s와 비어 있지 않은 단어들로 이루어진 사전 wordDict가 주어졌을 때, 문자열 s를 하나 이상의 사전 단어들을 공백으로 구분한 시퀀스로 분할할 수 있는지 판단하는 문제입니다.문제 조건분할 과정에서 사전에 있는 같은 단어를 여러 번 재사용할 수 있습니다.사전에는 중복된 단어가 없다고 가정합니다.예시문자열 s = applepenapple, 사전 wordDict = [apple, pen]이라고 가정해 보겠습니다. 이 경우 출력은 true입니다. 문자열 s를 apple pen apple처럼 공백으로 구분된 형태
문제 개요음이 아닌 정수로 이루어진 리스트가 주어졌을 때, 숫자들의 순서를 적절히 배치하여 만들 수 있는 가장 큰 수를 찾는 문제입니다. 예를 들어 배열이 [10, 2]라면 10을 먼저 두면 102가 되지만, 2를 먼저 두면 210이 되므로 정답은 210입니다.해결 접근 방법이 문제는 단순히 숫자 크기순으로 내림차순 정렬한다고 해결되지 않습니다. 예를 들어 [3, 30]에서 30이 더 큰 숫자이지만, 두 수를 이어 붙인 결과를 비교하면 330이 303보다 크기 때문에 3을 30보다 앞에 배치해야 합니다.핵심은 두 숫자를 문자열로 연
음이 아닌 정수 num이 주어졌을 때, 0부터 num까지의 모든 숫자 i에 대해 각 숫자를 이진수로 변환했을 때 포함된 1의 개수를 계산하고, 그 결과를 리스트 형태로 반환하는 문제입니다.예를 들어 num이 5라면 대상 숫자는 [0, 1, 2, 3, 4, 5]이며, 각 숫자의 이진수 표현은 각각 0, 1, 10, 11, 100, 101입니다. 따라서 각 숫자에 포함된 1의 개수는 [0, 1, 1, 2, 1, 2]가 됩니다.해결 전략이 문제는 동적 계획법(DP)과 비트 연산을 함께 활용하면 선형 시간 O(n) 안에 효율적으로 해결할
정규 표현식(Regular Expression, Regex)은 문자열에서 특정 패턴을 검색, 치환, 추출할 때 사용하는 강력한 도구입니다. 파이썬에서는 re 모듈을 통해 정규식을 손쉽게 활용할 수 있으며, 데이터 처리나 텍스트 분석 업무에서 필수적인 기술입니다.이 글에서는 파이썬 정규식의 핵심 문법을 카테고리별로 나누고, 각 패턴이 어떻게 동작하는지 예제와 함께 정리했습니다. 1. 리터럴(Literal) 문자 리터럴 문자는 특별한 의미 없이 문자 그대로 일치하는 패턴입니다. 번호예제 및 설명 1python문자열 python 그
Python의 정규표현식(re 모듈)에서는 괄호 ()를 단순한 그룹화 이상의 다양한 용도로 활용할 수 있습니다. 아래 표는 괄호와 함께 사용되는 대표적인 특수 구문과 그 동작 방식을 정리한 것입니다.괄호가 있는 특수 구문 예제번호구문 및 설명1R(?#comment)R과 일치하며, (?# ) 안에 작성된 내용은 모두 주석으로 처리됩니다. 패턴의 가독성을 높이고 싶을 때 유용하게 사용됩니다.2R(?i)ubyuby 부분을 매칭할 때 대소문자를 구분하지 않습니다. 즉, RUBY, ruby, Ruby 등 모두 일치 대상이 될 수 있습니다.3
CGI(Common Gateway Interface, 공용 게이트웨이 인터페이스)는 HTTP 서버와 같은 정보 서버가 외부 게이트웨이 프로그램과 데이터를 주고받을 수 있도록 정의한 표준 규약입니다. 웹 초창기부터 정적인 문서만 보여주던 웹에 동적인 처리 기능을 더해 준 핵심 기술로, 현재 표준 버전은 CGI/1.1이며 차세대 버전인 CGI/1.2가 준비되고 있습니다. 웹 브라우징은 어떻게 동작할까? CGI의 개념을 제대로 이해하려면 먼저 우리가 하이퍼링크를 클릭해 웹 페이지나 URL에 접속할 때 실제로 어떤 일이 일어나는지 알아야
다음은 hello.py라는 이름의 CGI 스크립트에 연결되는 간단한 링크입니다. 이 파일은 /var/www/cgi-bin 디렉터리에 저장되며, 내용은 아래와 같습니다. CGI 프로그램을 실행하기 전에 반드시 UNIX의 chmod 755 hello.py 명령어로 파일 권한을 변경하여 실행 가능한 상태로 만들어야 합니다. 예제 코드 #!/usr/bin/python print "Content-type:text/html\r\n\r\n" print '<html>' print '<hea
Python CGI 환경 변수란? CGI(Common Gateway Interface) 프로그램은 서버에서 제공하는 다양한 환경 변수(Environment Variables)에 접근할 수 있습니다. 이러한 환경 변수는 클라이언트의 요청 정보, 서버 정보 등을 담고 있어 CGI 프로그램을 작성할 때 매우 중요한 역할을 합니다. 아래 표는 CGI 프로그램에서 사용할 수 있는 주요 환경 변수들을 정리한 것입니다. 주요 CGI 환경 변수 목록 번호변수명 및 설명 1CONTENT_TYPE콘텐츠의 데이터 타입입니다. 클라이언트가 첨부
GET 메서드란?GET 메서드는 인코딩된 사용자 정보를 페이지 요청 주소 뒤에 덧붙여 전송하는 방식입니다. 이때 페이지 URL과 인코딩된 정보는 물음표(?) 문자로 구분됩니다.https://www.test.com/cgi-bin/hello.py?key1=value1&key2=value2GET 메서드는 브라우저에서 웹 서버로 정보를 전달하는 기본(default) 방식이며, 전송된 정보는 브라우저의 주소 표시줄(Location)에 긴 문자열 형태로 그대로 노출됩니다. 따라서 비밀번호나 기타 민감한 정보를 서버로 전달해야 하는 경우
POST 메서드란?CGI 프로그램에 정보를 전달하는 방법 중 일반적으로 더 안정적인 방식은 POST 메서드입니다. POST는 GET 방식과 동일한 형태로 정보를 패키징하지만, URL의 물음표(?) 뒤에 텍스트 문자열을 붙여 전송하는 대신 별도의 메시지로 전송한다는 점이 다릅니다. 이 메시지는 표준 입력(standard input)의 형태로 CGI 스크립트에 전달됩니다.GET 방식은 URL에 데이터가 그대로 노출되어 길이 제한이 있고 보안에 취약한 반면, POST 방식은 요청 본문(body)에 데이터를 담아 전송하므로 상대적으로 안전
체크박스(Checkbox)는 사용자가 여러 개의 옵션을 동시에 선택할 수 있어야 할 때 사용됩니다. 라디오 버튼과 달리 하나의 그룹에서 복수 선택이 가능하기 때문에 설문조사, 관심 분야 선택 등 웹 폼에서 널리 활용됩니다. 이 글에서는 HTML 폼으로 체크박스 데이터를 전송하고, Python CGI 스크립트에서 해당 값을 받아 처리하는 방법을 알아보겠습니다. HTML 폼 예제 다음은 두 개의 체크박스를 포함하는 HTML 폼 코드입니다. <form action = "/cgi-bin/checkbox.cgi" m
라디오 버튼(Radio Button)이란? 라디오 버튼은 여러 개의 선택지 중에서 단 하나의 옵션만 선택해야 하는 경우에 사용되는 폼 요소입니다. 체크박스와 달리 같은 name 속성을 가진 라디오 버튼 그룹에서는 한 번에 하나의 항목만 선택할 수 있습니다. HTML 폼 예제 다음은 두 개의 라디오 버튼을 포함하는 폼의 HTML 코드 예제입니다. <form action = "/cgi-bin/radiobutton.py" method = "post" target = "_blank&quo
웹 개발에서는 게시글 본문, 소개글, 피드백처럼 여러 줄에 걸친 긴 텍스트를 사용자로부터 입력받아 CGI 프로그램으로 전달해야 하는 경우가 자주 있습니다. 이럴 때 HTML의 <textarea> 요소를 사용합니다. 한 줄만 입력받는 <input type=text>와 달리, TEXTAREA는 단락 단위의 긴 문장 입력에 적합합니다. HTML 폼 예제 다음은 TEXTAREA 박스가 포함된 폼의 HTML 코드 예제입니다. <form action = /cgi-bin/textarea.py method = post
드롭다운 상자(Drop Down Box)는 선택 가능한 옵션이 많지만 그중 하나 또는 두 개만 선택해야 하는 경우에 사용하는 폼 요소입니다. 사용자가 목록에서 항목을 선택하면 해당 값이 서버의 CGI 프로그램으로 전송되어 처리됩니다.드롭다운 상자 예제아래는 드롭다운 상자 하나를 포함한 HTML 폼 코드 예제입니다.<form action = "/cgi-bin/dropdown.py" method = "post" target = "_blank"> <select name
HTTP 프로토콜은 요청 간에 상태를 유지하지 않는 무상태(stateless) 프로토콜입니다. 그러나 상업용 웹사이트라면 여러 페이지에 걸쳐 세션 정보를 유지해야 하는 경우가 많습니다. 예를 들어 사용자 등록 절차는 여러 페이지를 거쳐 완료되는데, 이때 모든 웹 페이지에서 사용자의 세션 정보를 어떻게 유지할 수 있을까요?이러한 문제를 해결하는 가장 효율적인 방법이 바로 쿠키(cookie)입니다. 쿠키를 활용하면 방문자의 선호 설정, 구매 내역, 커미션 등 다양한 정보를 기록하고 추적할 수 있으며, 이는 방문자 경험 개선과 사이트 통
웹 프로그래밍에서 브라우저로 쿠키를 전송하는 작업은 생각보다 매우 간단합니다. 쿠키는 본문 콘텐츠에 앞서 Content-type 필드 이전에 HTTP 헤더와 함께 전송됩니다. 예를 들어 사용자 ID(UserID)와 비밀번호(Password)를 쿠키로 설정하고 싶다면 다음과 같이 작성할 수 있습니다.쿠키 설정 예제#!/usr/bin/python print Set-Cookie:UserID = XYZ;\r\n print Set-Cookie:Password = XYZ123;\r\n print Set-Cookie:Expires = Tuesd
파이썬(Python)에서 쿠키 검색하기 설정된 모든 쿠키를 가져오는 작업은 매우 간단합니다. CGI 프로그램에서 쿠키는 환경 변수 HTTP_COOKIE에 저장되며, 여러 개의 쿠키는 세미콜론(;)으로 구분되어 다음과 같은 형식으로 전달됩니다. key1=value1;key2=value2;key3=value3... 예제: 쿠키 값 읽어오기 다음은 HTTP_COOKIE 환경 변수에서 쿠키를 파싱하여 원하는 값을 추출하는 예제 코드입니다. #!/usr/bin/python3 from os import environ if HTTP_COOKI