Spring boot project 경로

1. cmd 실행해서 디렉토리 접근한다. (dir 명령어로 어떤 파일이 있는지 확인 가능)

2. gradlew build 입력

3. build 완료 후 build/libs 경로 들어감. 이후 java -jar (build된 .jar 파일명) 입력

4. Spring 프로젝트가 서버에서 실행되는 것을 확인할 수 있다. Spring boot 참 편리하다. ㄷㄷ

반응형
n = int(input())
array = []
for i in range(n):
  array.append(int(input()))
array.sort(reverse=True)

print(' '.join(str(x) for x in array))
반응형
array = [5,7,9,0,3,1,6,2,4,8]
def quick(array):
  if(len(array) <= 1):
    return array

  pivot = array[0]
  tail = array[1:]

  left_side = [x for x in tail if x <= pivot] # 분할된 왼쪽 부분
  right_side = [x for x in tail if x > pivot] # 분할된 오른쪽 부분
  #print(pivot)
  #print(left_side)
  #print(right_side)
  # 분할 이후 왼쪽 부분과 오른쪽 부분에서 각각 정렬을 수행하고, 전체 리스트를 반환
  return quick(left_side) + [pivot] + quick(right_side)

print(quick(array))
반응형
list1 = [1,1,1,1]
list2 = [1,1,1,1]
result = [x+y for x,y in zip(list1, list2)]

#result = [2,2,2,2]
반응형

문자 입력 받기

text1 = input()

 

숫자 입력 받기

num = int(input())

 

리스트 입력 받기

list1 = list(input().split())

 

2개 숫자 입력받기

a, b = map(int, input('숫자 두 개를 입력하세요: ').split())

 

반응형

군주론을 읽고

군주론에서 앞의 내용들은 현실과 맞지 않는 내용이라 판단했다. 식민지를 건설하거나 군대를 파견하는 등의 내용이기 때문에 우리 시대에서는 이미 겪고 지나온 내용이기 때문이다. 하지만 군주는 항상 군무에 관심을 갖아야 하고, 평화시에 더욱 갖고 있어야 한다는 내용은 과거나 현재나 적용될 수 있고, 미래에도 물론 좋은 군주라면 갖춰야할 덕목이라고 생각한다. 영원한 아군도 영원한 적군도 없는 것이 현실이기 때문에 어떤 상황에서도 대비태세를 갖춰야 하는 것이 앞으로의 국민을 지키기 위함이기 때문이다.

 

16장 관후함과 인색함

성군이라 하면 항상 관후함을 먼저 떠올렸다. 사람들에게 하여금 존경심을 줄 수 있기 때문이다. 하지만 관후함을 얻기 위해서 무거운 세금을 부과하고 인민들을 수탈하지 않을 수 없기 때문에 관후함을 얻는 것은 군주의 자질이 아니다. 현재 인색함을 지속해서 갖추면 당장은 인색하다며 비난받을 수 있지만 추후 전쟁이나 비상상황에서 그 인색함이 결국 사람들로 하여금 안정감을 줄 수 있었고, 결국 좋은 평판을 나을 수 있기 때문이다. 관후하고 넉넉하다는 군주는 모두 일찍이 망했다. 이에 현재 부동산 정책으로 많은 국민들이 인색한 평가를 내리고 부정적이지만 결국 이것이 추후에는 좋은 방향일 것이라는 생각이 들었다. 현재 관후함을 보여주기 위해 집값을 올라가는 것을 놔두고 양도소득세 및 종합부동산세를 강화하지 않았다면 서민들의 생활은 점점 나락으로 갈 수 있기 때문이다.

17장 잔인함과 인자함

인간이란 본질이 은혜를 모르고 변덕스러우며 위선적인데다 기만에 능하며 위험을 피하려고 하고 이익에 눈이 어둡다.

이에 두려움을 주는 군주가 더 안정적으로 국가 운영을 할 수 있다.

18장 약속

군주는 사자와 여우를 닮아야 한다. 언제든 여우처럼 함정을 잘 파악해야 하고, 때로 늑대를 물리치기 위해 사자가 되어야 한다. 약속이란 명분을 내세워 언제든지 바꿀 수 있어야 하는 것이 훌륭한 군주이다.

 

마지막으로 23장 아첨꾼을 어떻게 피할 것인가가 인상적이었다. 항상 이전에도 아첨꾼을 옆에 두면 앞길이 막히고 힘들어 진다는 것을 염두에 두고 있었다. 하지만 그 방법에 대해서 생각해 본적이 없는 것 같았다. 그 방법을 이렇게 이야기 한다. 사려 깊은 사람들을 선임하여 그들에게만 솔직하게 말할 수 있도록 허용하되, 그것도 군주가 허용할 때만 가능해야 한다. 그래서 확고한 결정 방안에 대해서 동요해서는 안되고, 자신의 아첨을 보호하는 방법은 진실에 대한 직언을 한 자에게 화를 내지 않는 것이다. 화를 낸다면 그 직언한 자는 입을 다물기 때문이다. , 입을 다물고 있는 자를 발견한다면 화를 내도 좋다. 이러한 방법으로 앞으로 내 주변의 아첨꾼을 구별하고 아첨하는 사람이 아닌 진정성있고 사려 깊은 사람들과 함께하고 싶다.

반응형

평균의 종말을 읽고 나 역시 평균이라는 고정관념에 빠져있는 사람이란 것을 느꼈다. , 시야가 한 단계 넓어진 느낌을 받았다. 왜냐하면 항상 시스템 관점에서 개개인이 시스템에 맞춰야 한다고 생각했기 때문이다. 개개인이 다른 방법으로 문제에 접근할 수 있다는 것을 인정하지 않고 그것을 표준화시켰고, 이러한 방식이 일을 잘한다고 생각했다. 하지만 그것이 오히려 개개인의 특성을 망가트릴 수 있다는 것을 책을 통해 알았다. 한 가지 방식으로만 접근한다는 것은 문제 해결의 다양성을 망가트리고 개개인의 특성을 살릴 수 없다.

 

이런 관점에서 회사에서 도입한 시험은 정말 개개인의 장점을 발휘하도록 할 수 없는 방법이다. 이런 방법으로는 다양한 재능에 따라 개개인의 성과를 평가할 수 없다. 오히려 현장에서 특수한 분야에 재능을 발휘하는 인재도 표준화된 시험이 더 중요하다고 판단하게 만든다. 이런 문화에서는 혁신이 일어날 수 없다. 회사에서 정한 표준화된 교육으로 성장했기 때문이다. 이런 문화에서는 한 방향만을 생각하고, 모두가 경쟁을 한다고 생각하기 때문에 진정한 팀워크를 발휘하기 힘들다.

 

따라서 항상 문제 해결 방안을 위한 아이디어를 고안하거나 새로운 프로젝트를 발굴할 때 개개인의 특성을 맞춤화할 수 있는 방안을 생각해보려고 한다. 프로젝트를 도출하기 위해서 항상 하는 일이 고객 역량을 평가해 평균을 도출하는 일이다. 이때 논리는 항상 같다. 고객 평균 수준이 이러하기 때문에 이러한 기능이 필요하다. 이러한 논리에서는 고객맞춤형 기술을 도출할 수 없다. 개개인의 다양성이 무시되기 때문이다. 고객 맞춤형 플랫폼이나 기술을 창출하기 위해서 고정관념에서 벗어나 각 개인의 니즈와 효율을 함께 높일 수 있는 방법을 생각해야겠다.

 

반응형

이번 포스팅에서는 Visual Studio 환경 설정을 설명하도록 하겠다.

 

1. Project 생성

시작화면에서 New-Project를 클릭한다.

 

Visual C++에서 DLL를 선택하고 보기 좋은 프로젝트 이름을 바꿔준다.

2. 빌드 환경설정

보통 윈도우 64비트 환경에서 빌드되기 때문에 이를 가정하고, 환경설정을 진행한다.

Build-Configuration Manager 클릭
Debug x64선택

3. 프로젝트 속성 설정

프로젝트에서 Library와 Link되어 컴파일하거나 디버그되어 빌드되는 과정을 진행하기 위해 다음과 같은 설정이 필요하다.

Debug-프로젝트 속성 클릭
All Configurations, All Platforms 클릭
.dll을 .arx로 변경
Additional Include Directories 클릭
기존 설치했던 Objectarx inc폴더 설정
Code Generation에서 Multi-threaded DLL 선택(Autocad에서 여러 명령어를 등록하고, thread하는 방식이기 때문)
Linker에서 Addtional Library Directories 클릭
위와 같이 lib 폴더 설정
Linker-Input 클릭

  • rxapi.lib
  • acdb23.lib
  • accore.lib
  • ac1st23.lib

위와 같은 Library 파일을 추가
Linker-Command Line에서 /ignore:4099 추가

4. 디버깅 설정

해당 프로젝트를 디버깅하며 오류난 곳을 수정하기 위해 디버깅 설정을 진행한다.

 3-1)Command의 acad.exe파일을 통해 디버깅시 Autocad가 실행될 수 있도록 한다.

 3-2)Attach Yes를 통해 프로그램 프로세스가 Autocad 프로그램과 연동될 수 있도록 한다.

 3-3)Debugger Type을 Native Only로 변경한다.

 

마지막으로 적용 버튼을 클릭한다.

4. Helloworld Test

 

#include "stdafx.h"

#include <tchar.h>
#include "rxregsvc.h"
#include "acutads.h"
#include "accmd.h"

#pragma comment(linker,"/EXPORT:acrxEntryPoint")
#pragma comment(linker,"/EXPORT:acrxGetApiVersion")

void myCommand()
{
    acutPrintf(_T("\nHelloooo!"));
}

extern "C"
AcRx::AppRetCode acrxEntryPoint(AcRx::AppMsgCode msg, void* appId)
{
    switch (msg)
    {
    case AcRx::kInitAppMsg:
        acrxDynamicLinker->unlockApplication(appId);
        acrxRegisterAppMDIAware(appId);

        //register the commands
        acedRegCmds->addCommand(L"MYGROUP",
            _T("MYCOMMAND"),
            _T("MYCOMMAND"),
            ACRX_CMD_MODAL | ACRX_CMD_USEPICKSET,
            myCommand);
        acutPrintf(L"\nExample Application Loaded");
        break;
    case AcRx::kUnloadAppMsg:
        acedRegCmds->removeGroup(L"MYGROUP");
        acutPrintf(L"\nExample Application Unloaded");
        break;
    case AcRx::kLoadDwgMsg:
        // initialize lisp functions here
        break;
    case AcRx::kUnloadDwgMsg:
        // remove lisp functions here
        break;
    }
    return AcRx::kRetOK;
}

프로젝트 Main문에 위와 같은 코드를 복붙해서 빌드를 진행한다. 그러면 .arx가 생성이 되고, 이를 Autocad 실행 후 Appload 명령어를 통해 Upload한다.

그렇다면 위 코드에서 MYCOMMAND 명령어가 등록되게 되며, 사용자가 MYCOMMAND 명령어를 치면, Helloooo!가 프린트된다.

 

※ .arx파일은 빌드 후 Visual Studio 하단에서 경로를 확인할 수 있다.

반응형

Autocad ObjectARX을 활용해서 사용자 맞춤형 자동화 프로그램을 구현할 수 있다. 예를 들어, 내가 잘 사용하는 형상을 Block화해서 명령어만 치면 그 형상을 불러올 수 있다. 또, 비슷한 형상을 파라메트릭 매개변수와 치수구속/형상구속을 활용하여 Key값만 입력받아 형상을 구현하는 자동화 프로그램을 구성할 수 있다. 이러한 프로그램을 구현하기 위한 환경설정을 설명하려고 한다.

1. Visual Studio Professional

이를 구현하기 위해 Visual Studio를 활용해야 한다. 따라서 아래 링크를 통해 Visual Studio Pro를 설치하기 바란다.

visualstudio.microsoft.com/ko/thank-you-downloading-visual-studio/?sku=Professional&rel=16

 

Visual Studio를 다운로드해 주셔서 감사합니다. - Visual Studio

 

visualstudio.microsoft.com

2. Autocad ObjectARX

Autocad 안에서 구동되는 라이브러리를 Visual Studio C++환경에서 활용해야 한다. 따라서 라이브러리를 가져오기 위해 Autocad ObjectARX를 설치해야 한다. 아래 링크를 통해 설치하기 바란다.

 

www.autodesk.com/developer-network/platform-technologies/autocad/objectarx

 

AutoCAD ObjectARX SDK Platform Technologies | Autodesk Developer Network

The ObjectARX programming environment provides object-oriented C++, C#, and VB .NET application programming interfaces for developers to use, customize, and extend AutoCAD software and AutoCAD-based products, such as AutoCAD Architecture, AutoCAD Mechanica

www.autodesk.com

3. Autocad

당연히 Autocad도 설치되어 있어야 한다.

 

4. Visual Studio 환경설정

Autocad 에서 동작되는 프로그램은 기본적으로 .dll파일이다. 하지만 Autocad 에서 같은 파일을 .arx로 인식하고, 이를 Load해서 쓰는 방식을 택한다. 이에 따라 Visual Studio C++개발환경을 통해 .arx(=dll)을 만들어줘야하며, 이를 위해 Visual Studio 환경 설정을 해야 한다. 프로그램 구현에 이러한 환경설정이 핵심이며, 다음화에서 포스트하도록 하겠다.

 

반응형

https://programmers.co.kr/learn/courses/30/lessons/60057

 

코딩테스트 연습 - 문자열 압축

데이터 처리 전문가가 되고 싶은 어피치는 문자열을 압축하는 방법에 대해 공부를 하고 있습니다. 최근에 대량의 데이터 처리를 위한 간단한 비손실 압축 방법에 대해 공부를 하고 있는데, 문자

programmers.co.kr

def solution(s):
    length = []
    result = ""

    if len(s) == 1:
        return 1
    for cut in range(1, len(s) // 2 + 1):
        count = 1
        tempStr = s[:cut]

        for i in range(cut,len(s), cut):
            if s[i:i+cut] == tempStr:
                count += 1
            else:
                if count == 1:
                    count = ""
                result += str(count) + tempStr
                tempStr = s[i:i+cut]
                count = 1
        if count == 1:
            count = ""
        result += str(count) + tempStr
        length.append(len(result))
        result = ""
    return min(length)

 

2020 카카오 블라인드 채용 문제에 올라온 문제이다.

문자열을 처음부터 N개까지 압축하고, 압축한 문자열 중 가장 짧은 문자열의 길이를 return하는 문제이다.

 

알고리즘

1. 만약 input된 문자열의 길이가 1이라면 1을 return한다.

2. 자를 길이를 1부터 (문자열 길이 나누기 2한 몫) + 1까지 for문을 돌린다.(절반 이상까지 자르는 것은 무의미하다.)

3. count = 1로 초기화하고, 임시저장 str을 처음부터 자를 길이까지 잘라 저장한다.

4. for i in range(cut,len(s), cut) => range의 3번째 항에 cut을 넣으면 자를 단위 만큼 건너뛰며 for문을 돈다.

5. tempStr에 저장한 이후의 문자열이 cut 단위로 자른 문자 s[i:i+cut] 와 같다면 count에 1을 더해준다.

6. 같지 않고 count == 1이라면 count ="" 로 셋팅하고, count !=1이라면 result = result + str(count) + tempStr을 해준다.

7. 다시 tempStr에 s[i:i+cut] 을 저장하고( s[i:i+cut]이 이전 tempStr과 달랐기 때문에 현재 tempStr로 셋팅), count =1로 초기화 한다.

8. Length 중 최소값을 return한다.

반응형

+ Recent posts