반응형

안녕하세요.

 

이번에 간단한 스크립트를 짜는데,

 

하필 DB가 Tibero db라서 자바를 이용해서 스크립트를 짜게 되었습니다.

 

Odbc를 사용할수도 있지만, 윈도우 환경이 아니면 Tibero Odbc가 잘 동작하지가 않더라고요.

 

그래서 local 환경에서 Java로 스크립트를 작성하고, CentOs 환경으로 Jar파일을 옮겨 실행을 했는데요.

 

순서대로 IntelliJ에서 Java 프로젝트를 만들어서 Jar 파일을 만들고 실행하는것 까지 진행해보겠습니다.

 

IntelliJ에서 Create New Project를 선택해주세요.

 

저희는 기본 자바 프로젝트를 만들것이기 때문에 Java를 선택해주시고요.

이번에 진행하는 부분에서는 추가할 라이브러리나 프레임워크가 없기 때문에 Next를 눌러주세요.

 

다름에는 Template를 선택하는 화면이 나오는데요.

Command Line App을 선택하시면

public static void main(String[] args) 를 포함하는 Main 클래스를 자동으로 생성해주기 때문에

선택을 하고 Next로 진행해줄게요.

 

프로젝트 이름도 설정을 해주세요.

 

템플릿을 선택했기 때문에 기본적으로 Main 클래스가 생성이 되어 있고요,

친절하게 주석으로

write your code here 라고 적혀있네요.

여기에 Hello world를 출력하는 코드를 입력해보겠습니다.

 

Java에서는 System.out.println();  을 이용해서 표준입출력에 줄바꿈이 포함된 스트링을 출력 할 수 있어요.

 

여기까지 진행이 되었으면 코드는 완성되었습니다.

우측 상단에 보이는 run 버튼을 누르거나,

 

Ctrl+r을 이용해서 코드를 실행시켜 주세요.

 

하단에 Hello world가 정상적으로 출력이 되었죠?!

 

다음에는 이 프로젝트를 Jar로 묶어서 배포하는 방법을 알아보겠습니다.

 

감사합니다.

 

Jar 배포는 여기로 이동해주세요!

https://chunghyup.tistory.com/79

 

IntelliJ 프로젝트를 Jar 로 만들어서 배포하기

안녕하세요. 저번 게시물에서는 IntelliJ에서 Hello world 프로젝트를 만들었죠? https://chunghyup.tistory.com/78 intellij 자바 프로젝트 만들어서 Hello world 실행하기 안녕하세요. 이번에 간단한 스크립트를..

chunghyup.tistory.com

 

반응형
반응형

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

 

1436번: 영화감독 숌

666은 종말을 나타내는 숫자라고 한다. 따라서, 많은 블록버스터 영화에서는 666이 들어간 제목을 많이 사용한다. 영화감독 숌은 세상의 종말 이라는 시리즈 영화의 감독이다. 조지 루카스는 스타

www.acmicpc.net

문제

666은 종말을 나타내는 숫자라고 한다. 따라서, 많은 블록버스터 영화에서는 666이 들어간 제목을 많이 사용한다. 영화감독 숌은 세상의 종말 이라는 시리즈 영화의 감독이다. 조지 루카스는 스타워즈를 만들 때, 스타워즈 1, 스타워즈 2, 스타워즈 3, 스타워즈 4, 스타워즈 5, 스타워즈 6과 같이 이름을 지었고, 피터 잭슨은 반지의 제왕을 만들 때, 반지의 제왕 1, 반지의 제왕 2, 반지의 제왕 3과 같이 영화 제목을 지었다.

하지만 숌은 자신이 조지 루카스와 피터 잭슨을 뛰어넘는다는 것을 보여주기 위해서 영화 제목을 좀 다르게 만들기로 했다.

종말의 숫자란 어떤 수에 6이 적어도 3개이상 연속으로 들어가는 수를 말한다. 제일 작은 종말의 숫자는 666이고, 그 다음으로 큰 수는 1666, 2666, 3666, .... 과 같다.

따라서, 숌은 첫 번째 영화의 제목은 세상의 종말 666, 두 번째 영화의 제목은 세상의 종말 1666 이렇게 이름을 지을 것이다. 일반화해서 생각하면, N번째 영화의 제목은 세상의 종말 (N번째로 작은 종말의 숫자) 와 같다.

숌이 만든 N번째 영화의 제목에 들어간 숫자를 출력하는 프로그램을 작성하시오. 숌은 이 시리즈를 항상 차례대로 만들고, 다른 영화는 만들지 않는다.

입력

첫째 줄에 숫자 N이 주어진다. N은 10,000보다 작거나 같은 자연수이다.

출력

첫째 줄에 N번째 영화의 제목에 들어간 수를 출력한다.

 

해설

브루트포스 문제이기 때문에 "1부터 쭉 진행하며 N번째 숫자를 찾으면 된다" 라는 접근으로 문제를 해결하였다.

 

첫번째로 작성한 코드는 isEndNumber라는 함수로 input 숫자가 종말의 숫자인지(666을 포함하는 숫자인지) boolean의 output을 내는 참수를 작성하였다.

 

해당 함수는 숫자를 스트링으로 변환 후 6이 연속 3번 나오면 true를 반환하도록 하였다.

 

이후 1부터 진행하며 N번대 EndNumber를 찾아 stdout으로 출력하면 끝난다.

 

코드

 

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
const fs = require('fs');
const input = fs.readFileSync('/dev/stdin').toString()
const n = parseInt(input);
 
function isEndNumber(num) {
  const str = String(num);
  let count = 0;
  for(let i = 0; i < str.length; i++) {
    const char = str[i];
    if(char === '6') {
      count++;
    } else {
      count = 0;
    }
 
    if(count >= 3) {
      return true;
    }
  }
 
  return false;
}
 
let currentNum = 1;
let count = 0;
while(true) {
  if(isEndNumber(currentNum)) {
    count++;
    if(count === n) {
      console.log(currentNum);
      break;
    }
  }
  currentNum++;
}
cs
반응형
반응형

로컬에서 tsc 빌드는 정상적으로 되는데,

 

배포시 원격 서버에서 빌드를 할때 문제가 발생하였다.

(지금까지 빌드부터 배포까지 잘 되고 있었는데... 갑자기 발생하였다 ㅠㅠ)

 

정확히 어떤 환경 때문에 발생하게 되었는지는 파악하지 못했지만, tsconfig를 수정하여 문제를 해결 할 수 있었다.

 

오류 내용은 다음과 같다.

 

Property 'asyncIterator' does not exist on type 'SymbolConstructor'.

Cannot find name 'AsyncIterableIterator'. Do you need to change your target library? Try changing the `lib` compiler option to 'es2018' or later.

 

해결 방법은 tsconfig.json 파일에 해당 내용을 추가해주었다.

 

"compilerOptions": {

  "lib": [

    "esnext.asynciterable"

  ]

}

 

기존에 있던 lib에서 "esnext.asynciterable"를 추가하였고,

정상적으로 빌드, 배포 되었다.

반응형

+ Recent posts