반응형

cirros 이미지로 서버(인스턴스)를 실행했는데

 

서버는 Active인데 ping 과 같은 기능이 동작하지 않음.

 

Openstack dashboard에서 인스턴스의 console 로 가서 확인해보니

No bootable device

 
라고 뜨는 문제가 발생함.
 
즉, OS 설치 자체가 되지 않음.
 
 
확인해보니 이미지 파일 자체가 잘못 됨.
 
curl로 받아서 단순 텍스트 파일로 저장되어 있음.
 
 
```
```
 
이 명령어를
 
```
yum install wget
```
 
위와같이 다운로드 받도록 변경함.
반응형
반응형

정렬 알고리즘 중 삽입 정렬(Insertion sort)에 대해서 설명을 드리고, 백준 알고리즘에서 실전 문제를 푸는 것 까지 진행을 해볼게요.

 

삽입 정렬은 정렬 알고리즘을 처음 접하시는 분들도 매우 직관적으로 이해 할 수 있는 알고리즘 입니다.

 

매우 간단한 알고리즘인데요.

 

간단하게 설명을 드리면

삽입 정렬은 배열의 모든 요소를 하나씩 비교하면서,
비어있는 배열에 하나씩 옮기는 방식의 알고리즘 입니다.
이 옮기는 과정에서 정렬이 되도록 삽입 해줍니다.

즉, 올바른 위치에 계속해서 삽입(Insertion) 만 해준다면 우리는 정렬이 된 배열을 얻을 수 있습니다.

 

그림으로 설명해 드릴게요.

 

저희는 3, 1, 7 3개의 숫자가 있는 배열을 가지고 있고,

이 배열을 정렬을 하고 싶습니다.

오름차순으로 정렬을 하여 1, 3, 7 배열을 얻고 싶은거죠.

 

위에 설명대로 첫번째 3을 비어있는 배열에 옮기겠습니다.

 

첫번째 요소이고 옮길 곳은 배열이 비어있기 때문에 그냥 3을 옮겨놓습니다.

 

다음으로 1을 옮겨야 하는데요.

 

이미 3보다 큰 3이 배열에 들어가 있기 때문에

1은 3보다 앞에 삽입(Insertion) 되어야 합니다.

 

3을 한칸 뒤로 밀고 1을 넣으면 아래처럼 됩니다.

 

마지막으로 7을 넣어야 하는데,

복사본 배열과 비교를 해보니 모든 숫자가 7보다 작네요.

그럼 제일 끝에 삽입을 하면 되겠네요.

 

이렇게 정렬이 완료 되었습니다.

 

백준에서 관련 문제를 찾아보겠습니다.

 

많은 정렬 문제가 있지만, 삽입 정렬은 O(n^2)의 방법이기 때문에 시간제약이 적은 문제를 가서 풀어야합니다.

 

백준에서는 2750번: 수 정렬하기 문제에서 연습해보실 수 있습니다.

 

https://www.acmicpc.net/problem/2750

 

2750번: 수 정렬하기

첫째 줄에 수의 개수 N(1 ≤ N ≤ 1,000)이 주어진다. 둘째 줄부터 N개의 줄에는 수 주어진다. 이 수는 절댓값이 1,000보다 작거나 같은 정수이다. 수는 중복되지 않는다.

www.acmicpc.net

 

해설

저는 문제를 풀기에 앞서서 함수를 먼저 작성하였는데요.

 

정렬을 위한 Sort라는 함수를 작성하였고.

 

삽입정렬에서의 삽입 이라는 기능을 위한 insert라는 함수를 정의하였습니다.

 

Sort 함수에서는 기존 배열의 요소들을 하나씩 insert 함수를 사용하여 정렬을 하고,

 

insert 함수는 각 요소가 들어갈 위치를 찾고 삽입하는 역할을 수행합니다.

 

코드

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
const fs = require('fs');
const input = fs.readFileSync('/dev/stdin').toString().split('\n');
const N = parseInt(input[0]);
 
const list = [];
for(let i = 1; i <= N; i++) {
  list.push(parseInt(input[i]));
}
 
// sort 함수 구현
function sort(unsortedList) {
  const sortedList = []
  for(let num of unsortedList) {
    insert(sortedList, num)
  }
  return sortedList;
}
 
// 삽입 함수 구현
function insert(sortedList, num) {
  let index = -1;
  for(let i = 0; i < sortedList.length; i++) {
    if(sortedList[i] < num) {
      continue;
    } else {
      index = i;
      break;
    }
  }
 
  if(index < 0) {
    sortedList.push(num);
  } else {
    sortedList = sortedList.splice(index, 0, num);
  }
}
 
let sortedList = sort(list);
 
for(let num of sortedList) {
  console.log(num);
}
cs
반응형
반응형

안녕하세요.

 

저번 게시물에서는 IntelliJ에서 Hello world 프로젝트를 만들었죠?

https://chunghyup.tistory.com/78

 

intellij 자바 프로젝트 만들어서 Hello world 실행하기

안녕하세요. 이번에 간단한 스크립트를 짜는데, 하필 DB가 Tibero db라서 자바를 이용해서 스크립트를 짜게 되었습니다. Odbc를 사용할수도 있지만, 윈도우 환경이 아니면 Tibero Odbc가 잘 동작하지가

chunghyup.tistory.com

 

이번에는 이 프로젝트를 Jar로 만들어서 실행하는 방법을 알려드리려고 합니다.

 

저같은 경우에는 Java를 이용해서 간단하게 만든 프로그램을

 

Cron을 이용해서 실행시키거나, 일회용 스크립트와 같은 자바 프로그램을 실행할때 jar를 이용한 배포를 사용합니다.

 

순서대로 진행해볼게요.

 

상단에 있는 File 을 눌러보시면 Project Structure 라는 메뉴가 보이는데요.

이 메뉴로 이동을 해주세요.

 

그럼 아래와 같은 창이 뜹니다.

좌측에 Artifacts라는 메뉴를 눌러 주시면, 현재는 텅 비어있는데요.

상단에 보이는 + 버튼을 눌러서 Artifact를 추가해 줄 예정입니다.

 

+를 눌러주세요.

 

제일 상단에 보이는 JAR를 선택하고, 프로젝트에 포함된 모든 의존성을 함께 빌드하기 위해서

From modules with dependencies를 선택해주세요.

 

다음과 같은 모달 창이 뜹니다.

여기서 Main Class를 선택해주시면 됩니다.

이전 게시물에서 오신 분이라면, template 을 선택했기 때문에 저와 같은 Main 클래스가 있을텐데요.

아래 이미지와 같이 그 Main class를 선택해주세요.

 

 

Main클래스를 선택해주시면 준비는 끝났습니다.

OK를 눌러서 Artifact가 아래와 같이 추가가 되었는지 확인해주세요.

위 이미지와 같이 추가가 되었으면 마지막으로 OK를 누르면 Jar를 만들기 위한 준비는 끝이납니다.

이제 Jar 파일을 만들고 실행해 볼까요?

상단에 Build 메뉴에서 Build Artifacts로 이동을 해주세요.

(조금전에 Artifact를 만들었죠?)

 

아래와 같이 작은 팝업창 같은게 뜨면, 저희가 만들었던 java:jar Artifact를 선택하고 build 를 눌러주세요.

빌드를 누르면 out 디렉토리 안에 위와같이 jar 파일이 생기는 것을 확인 할 수 있어요.

이제 실행만 하면 됩니다.

 

실행을 위한 명령어는

 

java -jar  파일명

 

입니다.

끝!!

이제 jar 배포도 하실 수 있겠죠?

 

반응형

+ Recent posts