
web.xml 파일의 구조(2) 서블릿 매핑 WAS는 프로그램이 실행되자마자, web.xml를 찾아 내부 코드를 확인하고 객체를 생성한다 정확히는 , 태그 내부의 코드를 확인하고 서블릿 객체를 생성한다 즉, Servelet의 객체를 servlet-name에 지정된 별칭으로 생성한다 이러한 과정을 서블릿 매핑 이라고 말한다 기본 구조에는 서블릿 매핑을 위한 코드가 없으므로, 직접 입력해주어야 한다 먼저 컨테이너(WAS)에게 객체를 생성할 서블릿의 이름과, 서블릿이 어떤 패키지에 들어있는지를 알려준다 서블릿의 패키지 경로(FQCN)는 태그 안에 작성하고 서블릿의 이름(Alias)은 태그 안에 작성한다 서블릿의 이름(Alias), 패키지 패키지 경로(FQCN)는 태그 안에 작성해야 한다 servlet-clas..

📌 20291. 파일 정리 친구로부터 노트북을 중고로 산 스브러스는 노트북을 켜자마자 경악할 수밖에 없었다. 바탕화면에 온갖 파일들이 정리도 안 된 채 가득했기 때문이다. 그리고 화면의 구석에서 친구의 메시지를 확인할 수 있었다. 바탕화면의 파일들에는 값진 보물에 대한 정보가 들어 있어. 하나라도 지우게 된다면 보물은 물론이고 다시는 노트북을 쓸 수 없게 될 거야. 파일들을 잘 분석해서 보물의 주인공이 될 수 있길 바랄게. 힌트는 “확장자”야. 화가 났던 스브러스는 보물 이야기에 금세 화가 풀렸고 보물의 정보를 알아내려고 애썼다. 하지만 파일이 너무 많은 탓에 이내 포기했고 보물의 절반을 보상으로 파일의 정리를 요청해왔다. 스브러스의 요청은 다음과 같다. 파일을 확장자 별로 정리해서 몇 개씩 있는지 알려..

📌 10989. 수 정렬하기3 N개의 수가 주어졌을 때, 이를 오름차순으로 정렬하는 프로그램을 작성하시오. ✏️ 입력. 첫째 줄에 수의 개수 N(1 ≤ N ≤ 10,000,000)이 주어진다. 둘째 줄부터 N개의 줄에는 수가 주어진다. 이 수는 10,000보다 작거나 같은 자연수이다. 📋 출력. 첫째 줄부터 N개의 줄에 오름차순으로 정렬한 결과를 한 줄에 하나씩 출력한다. # 메모리 초과 import sys def counting_sort(arr): res = [0] *(max(arr) + 1) for i in range(len(arr)): res[arr[i]] += 1 for i in range(len(res)): for j in range(res[j]): print(i) input = sys.stdi..

web.xml 파일의 구조(1) Welcome file web.xml 을 열어보면 위와 같은 기본 구조를 갖는다 에는 현재 프로젝트의 이름이 작성되어 있다 그리고 안에는 Welcome File이 여러 개 나열되어있다 Welcome File : 웹 어플리케이션이 실행되기위한 디렉토리의 기본 웹 페이지 클라이언트가 디렉토리까지만 지정해서 요청한다면 웹 서버는 해당 디렉토리에서 웰컴 파일을 찾아서 응답한다. 웹 클라이어트가 프로젝트 디렉토리까지만 지정해서 요청하면 404에러가 발생한다. 웹 페이지를 찾을 수 없다고 말한다 만약 프로젝트 안에 index.html 이 있다면 요청을 원하는 파일을 지정하지 않아도 자동으로 index.html이 실행된다 위와 같이 index.html 을 생성하고, 다시한번 프로젝트 ..

📌 1431. 시리얼 번호 다솜이는 기타를 많이 가지고 있다. 그리고 각각의 기타는 모두 다른 시리얼 번호를 가지고 있다. 다솜이는 기타를 빨리 찾아서 빨리 사람들에게 연주해주기 위해서 기타를 시리얼 번호 순서대로 정렬하고자 한다. 모든 시리얼 번호는 알파벳 대문자 (A-Z)와 숫자 (0-9)로 이루어져 있다. 시리얼번호 A가 시리얼번호 B의 앞에 오는 경우는 다음과 같다. A와 B의 길이가 다르면, 짧은 것이 먼저 온다. 만약 서로 길이가 같다면, A의 모든 자리수의 합과 B의 모든 자리수의 합을 비교해서 작은 합을 가지는 것이 먼저온다. (숫자인 것만 더한다) 만약 1,2번 둘 조건으로도 비교할 수 없으면, 사전순으로 비교한다. 숫자가 알파벳보다 사전순으로 작다. 시리얼이 주어졌을 때, 정렬해서 출력..

📌 11656. 접미사 배열 접미사 배열은 문자열 S의 모든 접미사를 사전순으로 정렬해 놓은 배열이다. baekjoon의 접미사는 baekjoon, aekjoon, ekjoon, kjoon, joon, oon, on, n 으로 총 8가지가 있고, 이를 사전순으로 정렬하면, aekjoon, baekjoon, ekjoon, joon, kjoon, n, on, oon이 된다. 문자열 S가 주어졌을 때, 모든 접미사를 사전순으로 정렬한 다음 출력하는 프로그램을 작성하시오. ✏️ 입력. 첫째 줄에 문자열 S가 주어진다. S는 알파벳 소문자로만 이루어져 있고, 길이는 1,000보다 작거나 같다. 📋 출력. 첫째 줄부터 S의 접미사를 사전순으로 한 줄에 하나씩 출력한다 # 접미사 배열 str = input() arr..

📌 11650. 좌표 정렬하기 2차원 평면 위의 점 N개가 주어진다. 좌표를 x좌표가 증가하는 순으로, x좌표가 같으면 y좌표가 증가하는 순서로 정렬한 다음 출력하는 프로그램을 작성하시오. ✏️ 입력. 첫째 줄에 점의 개수 N (1 ≤ N ≤ 100,000)이 주어진다. 둘째 줄부터 N개의 줄에는 i번점의 위치 xi와 yi가 주어진다. (-100,000 ≤ xi, yi ≤ 100,000) 좌표는 항상 정수이고, 위치가 같은 두 점은 없다. 📋 출력. 첫째 줄부터 N개의 줄에 점을 정렬한 결과를 출력한다. n = int(input()) arr = [] for i in range(n): arr.append(list(map(int, input().split()))) arr.sort() for i in rang..

퀵 정렬의 시간 복잡도 - 퀵 정렬의 평균 시간 복잡도는 O(NlogN) 으로 다른 정렬 알고리즘에 비해 매우 빠른 편이다 - 피벗값의 위치가 변경되어 분할이 일어날 때 마다 정확히 왼쪽 리스트와 오른쪽 리스트를 절반씩 분할한다고 가정해보자 - 데이터의 개수를 8개라고 가정하고, 정확히 절반씩 나누어 간다는 가정을 해보자 - 이 때 높이를 확인해보면 데이터의 개수가 N 개일 때 높이는 약 logN 이라고 판단할 수 있다 - 즉, 분할이 이루어지는 횟수가 기하급수적으로 감소한다 - 데이터의 개수가 많아질수록 다른 정렬에 비해 압도적으로 빠르게 동작하게 된다 - 다만, 퀵 정렬의 평균 시간 복잡도는 O(NlogN) 이지만, 최악의 경우의 시간 복잡도는 O(N²) 이다 - 데이터가 무작위로 입력되는 경우 퀵 ..

호어 분할 방식 구현하기 / Python - 퀵 정렬에 대해 알아보고, 첫 번째 데이터를 피벗(Pivot)으로 사용하는 호어 분할 방식의 전체적인 과정은 위와 같다 - 예제로 들었던 배열을 사용해, 퀵 정렬을 파이썬으로 구현해 보도록 하자 arr = [ 5, 7, 9, 0, 3, 1, 6, 2, 4, 8 ] - 예제의 데이터를 배열의 형태로 선언하여 사용한다 def quick_sort(arr, start, end): if start >= end: # 요소가 하나인 경우 종료 return pivot = start # 호어 방식이므로 첫번째 데이터를 pivot으로 사용한다 left = start + 1 # 왼쪽 데이터는 pivot의 바로 오른쪽 데이터를 사용한다 right = end # 오른쪽 데이터로 마지..

퀵 정렬 - 퀵 정렬은 가장 많이 사용되는 알고리즘이다. - 퀵 정렬과 비교할 만큼 빠른 알고리즘에는 병합 정렬 알고리즘이 있다 - 기준을 설정하고, 다음 큰 수와 작은 수를 교환하여 리스트를 반으로 나누는 방식으로 동작한다 피벗 (Pivot) - 피벗(Pivot) : 큰 숫자와 작은 숫자를 교환할 때, 교환의 기준을 말한다 - 퀵 정렬에서는 피벗(Pivot)이 사용된다. 퀵 정렬을 수행하기 전에는 피벗을 어떻게 설정할 것인지 미리 명시해야 한다 - 피벗을 설정한 뒤에는 왼쪽에서부터 피벗보다 큰 데이터를 찾고, 오른쪽에서부터 피벗보다 작은 데이터를 찾는다 - 피벗을 설정하고 리스트를 분할하는 방법에 따라 퀵 정렬이 분류된다 호어 분할 방식(Hoare Parition) - 가장 대표적인 분할 방식인 호어 ..