본문 바로가기
반응형

전체 글124

알고리즘4 탐색이란 많은 양의 데이터 중에서 원하는 데이터를 찾는 과정을 의미한다. 대표적인 탐색 알고리즘으로 DFS,BFS를 꼽을 수 있다. 자료구조란 '데이터를 표현하고 관리하고 처리하기 위한 구조' 를 의미한다. DFS(Depth-First Search) , 깊이 우선 탐색이라고 하며, 그래프에서 깊은 부분을 우선적으로 탐색하는 알고리즘이다. DFS는 먼저 들어간건 제일 늦게 나오는 FILO 구조를 지니고 있는 스택으로 구현한다. # DFS 메서드 정의 def dfs(graph, v, visited): # 현재 노드를 방문 처리 visited[v] = True print(v,end=' ') # 현재 노드와 연결된 다른 노드를 재귀적으로 방문 for i in graph[v]: if not visited[i]: .. 2024. 4. 19.
알고리즘3 구현(Implementation) 풀이를 떠올리는 것은 쉽지만 소스코드로 옮기기 어려운 문제를 지칭한다 구현 유형의 예시 알고리즘은 간단한데 코드가 지나칠만큼 길어지는 문제 실수 연산을 다루고,특정 소수점 자리까지 출력해야 하는 문제 문자열을 특정한 기준에 따라서 끊어 처리해야 하는 문제 적절한 라이브러리를 찾아서 사용하는 문제 완전 탐색 - 모든 경우의 수를 주저 없이 다 계산하는 방법 시뮬레이션 - 문제에서 제시한 알고리즘을 한 단계씩 차례대로 직접 수행 문제 상하좌우 # 상하좌우 문제 n = int(input()) dx = [0,0,-1,1] dy = [-1,1,0,0] # L R U D con = ['L', 'R', 'U', 'D'] move = list(input().split()) x = 0 .. 2024. 4. 19.
알고리즘2 입출력시 공백으로 구분된 데이터의 개수가 많으면, data = list(map(int,input(),split()) 으로 해주는 것이 좋다. 그게 아니고 데이터의 개수가 적다면 data = map(int,input(),split()) 으로 해줘도 된다. 만약에 PS 문제에서 시간초과 문제가 발생할 경우를 막기위해 속도가 최대한으로 빠른 방법도 존재한다. 외우자. import sys # 문자열 입력받기 data = sys.stdin.readline().rstrip() sys 라이브러리를 사용할 때는 한 줄 입력을 받고 나서 rstrip() 함수를 꼭 호출해야 한다. readline() 으로 입력하면 ㅇ비력 후 엔터가 줄 바꿈 기호로 입력되는데, 이 공백 문자를 제거하려면 rstrip() 함수를 사용해야 한.. 2024. 4. 19.
알고리즘1 인덱싱(Indexing) - 인덱스 값을 입력하여 리스트의 특정한 원소에 접근하는 것 슬라이싱(Slicing) - 리스트에서 연속적인 위치를 갖는 원소들을 가져올 때 사용하는 기능. a = [1,2,3,4,5,6,7] print(a[1:4]) # RESULT [2,3,4] 슬라이싱 구동 방법. 리스트 관련 기타 메서드 메서드 명 사용법 설명 시간 복잡도 append() 변수명.append() 리스트에 원소를 하나 삽입할때 사용 O(1) sort() 변수명.sort(), .sort(reverse= True) 1. 오름차순 정렬 2. 내림차순 정렬 O(NlogN) reverse() 변수명.reverse() 리스트의 원소 순서를 모두 뒤집어 놓음 O(N) insert() 변수명.insert(삽입할 위치 인덱스.. 2024. 4. 19.
알고리즘 시간 복잡도 알고리즘의 시간 복잡도 중에서 자주 접할 수 있는 형태로는 다음과 같은 것들이 있다. O(1) 상수 시간 알고리즘(Constant-time algorithm)의 수행시간은 입력의 크기에 영향을 받지 않는다. 상수 시간 알고리즘의 예로는 공식을 이용하여 답을 바로 계산해내는 알고리즘이 있다. O(log n) 로그 시간 알고리즘(Logarithmic algorithm)은 대체로 단계마다 입력의 크기를 절반씩 줄여나간다. n을 계속 2로 나눠가면서 1이 되도록 하는 데에 필요한 단계 수는 log2 n 이고, 따라서 이러한 알고리즘의 수행시간은 로그 시간이다. 로그의 밑수가 시간 복잡도에 나타나 있지 않음에 유의하라. O(√n) 제곱근 시간 알고리즘(Square root algorithm)은 O(log n) 보.. 2024. 4. 19.
URL Encoding 특수문자코드 ⓒ %26%23169; ® %26%23174; ™ %E2%84%A2 linefeed %0A space %20 creturn %0D v %76 u %75 w %77 t %74 x %78 tab %09 y %79 backspace %08 z %7A { %7B ! %21 | %7C " %22 } %7D # %23 ~ %7E $ %24 ¢ %A2 % %25 £ %A3 & %26 ¥ %A5 ' %27 | %A6 ( %28 § %A7 ) %29 ≪ %AB * %2A ¬ %AC + %2B ? %AD , %2C º %B0 - %2D ± %B1 . %2E ª %B2 / %2F , %B4 0 %30 μ %B5 1 %31 ≫ %BB 2 %32 ¼ %BC 3 %33 ½ %BD 4 %34 ¿ %BF 5 %35 A` %C0 6 .. 2024. 4. 12.
알고리즘 순서도 기호와 구조 : 순차, 선택, 반복 위 그림을 보면 프로그래밍 절차에서 순서도 작성 시기를 알 수 있어요. "알고리즘 설계(순서도 작성)" 찾으셨나요? 코딩하기 전에 알고리즘을 작성해요. 이때 약속된 기호인 순서도를 사용하면 논리적으로 알고리즘을 작성할 수 있어요. 그리고 순서도를 작성하게 되면 실제로 코딩할 때 오류 발생이 적어지고 프로그램 개발 시간과 비용이 절약될 수 있어요. 이번 시간에는 순서도 구조, 순서도 기호에 대해 알려드릴게요. [1] 순서도 구조 알고리즘을 순서도로 표현할 때 순차, 선택, 반복 구조를 사용해요. | 순차 : 주어진 명령을 위해 아래 방향으로 절차화시킨 구조 | 선택 : 주어진 조건을 참과 거짓으로 구분하여 적합한 쪽으로 처리하는 구조 | 반복 : 주어진 조건에 따라서 주어진 명령을 반복 처리하는 구조 [2.. 2024. 4. 11.
[Javascript] ES6 템플릿 문자열 ES6에서는 템플릿 문자열을 문자열 연결 대신 사용할 수 있다. 그러면 문자열 중간에 변수를 삽입할 수도 있다. 전통적인 문자열 연결은 더하기 (+)로 문자열과 변수를 서로 이어붙이는 방식을 사용한다. getTitleOldVersion() { return this.lastName + ", " + this.firstName + " " + this.middleName; }, 템플릿에서는 ${ } 를 사용해 문자열 안에 변수를 집어넣을 수 있기 때문에 문자열을 단 하나만 사용해도 된다. getTitleEs6() { return `${this.lastName}, ${this.firstName} ${this.middleName}`; }, 템플릿 문자열에서는 공백 뿐아니라 개행문제 등도 유지시킨다. 따라서 아래와 .. 2024. 4. 9.
[Javascript] axios로 rest api 호출시 cookie 값 전달 안되는문제 해결 Vue나 react로 frontend를 개발하고 spring으로 backend를 개발할 경우 보통은 frontend server와 backend server의 origin이 달라지게 된다. 즉 frontend 주소는 localhost:3000 backend의 주소는 localhost:8080 이런 식이다. backend side에서 CORS 설정을 해줌으로서 origin이 달라지는 경우에 교차 접근 허용을 설정하여 동작을 진행하게 된다. 하지만 origin이 달라지는 경우 분명 browser에서는 cookie값이 확인이 되는데 backend에서 api 호출을 잡아보면 request객체에 cookie값이 안실려오는 경우가 있다. 이럴 경우에는 axios 호출시 config에 withCredentials :.. 2024. 4. 9.
자바스크립트 고차 함수 고차 함수란? 함수를 인자로 전달받거나 함수를 결과로 반환하는 함수를 말한다. 1. every() 콜백 함수에서 배열의 모든 요소가 True이면, true를 리턴 1-1) 기본 형식 array.every(callbackFunction(currentValue, index, array), thisArg) callbackFunction : 콜백 함수 thisArg : this값으로 활용 currentValue : 배열의 현재 값 index : 배열의 현재 값의 인덱스 array : 현재 배열 1-2) 사용 예 let arr = [1,2,3,4,5,6]; const callBack = (val) => val < 6 arr.every(callBack) // 하나라도 false면, false arr.every(va.. 2024. 4. 9.
Jackson ObjectMapper 정리 개요 Java 개발자라면 Jackson에서 제공하는 ObjectMapper와 자주 마주치게 됩니다. Java 클래스 내용을 확인하거나 내용물의 Parsing 과정에 필요한 커스터마이징이 존재하기 때문입니다. 물론 중요한 기능은 (1) "Java Object" =Serialize=> "JSON", (2) "JSON" =Deserialize=> "Java Object" 입니다. 개발 중에 매 번 찾아보기 지쳐서 이제는 한 곳에 정리가 필요하지 않을까 생각되어서 이 글을 쓰게 되었습니다. 목차 Add Dependency for "Jackson ObjectMapper" Basic Features Convert "Java Object" to "JSON" Convert "JSON" to "Java Object" C.. 2023. 9. 21.
스프링 어노테이션(Annotation) 정리 1. Annotation이란? Spring에서는 Annotation을 많이 사용합니다. Annotation의 역할은 아래와 같습니다. 관련 설명은 스프링 빈(Spring Bean)이란? 개념 정리 링크를 참조해주세요. JAVA에서 Annotation 이라는 기능이 있습니다. 사전상으로는 주석의 의미이지만 Java 에서는 주석 이상의 기능을 가지고 있습니다. Annotation은 자바 소스 코드에 추가하여 사용할 수 있는 메타데이터의 일종입니다. 소스코드에 추가하면 단순 주석의 기능을 하는 것이 아니라 특별한 기능을 사용할 수 있습니다. Annotation은 클래스와 메서드에 추가하여 다양한 기능을 부여하는 역할을 합니다. Annotation을 활용하여 Spring Framework는 해당 클래스가 어떤 .. 2023. 7. 27.
Git GUI 소스트리(SourceTree) 설치방법과 사용방법 SourceTree 설치하기 먼저 소스트리(SourceTree) 홈페이지에 접속합니다. 소스트리(SourceTree) 홈페이지 바로가기 소스트리(SourceTree) 홈페이지 홈페이지에 접속을 하면 다운로드를 받을 수 있는 버튼이 보입니다. 소스트리는 윈도우즈와 Mac OS를 지원하고 있으므로 원하는 시스템의 파일을 다운로드 받으면 됩니다. 다운받은 설치파일을 실행시킵니다. Registration 설치는 아무나 할 수 있는 것은 아니고 SourceTree에 회원가입을 하고 로그인을 해야 설치를 할 수 있습니다. SourceTree는 Jira, Trello를 제작하고 운영하는 Atlassian이라는 유명한 회사에서 만든 프로그램입니다. 또한 이 회사는 Github같은 Bitbucket도 운영하고 있는데요... 2023. 7. 25.
Git Flow 개념 이해하기 Git-flow 이해하기 Git-flow는 Git이 새롭게 활성화되기 시작하는 10년전 쯤에 Vincent Driessen이라는 사람의 블로그 글에 의해 널리 퍼지기 시작했고 현재는 Git으로 개발할 때 거의 표준과 같이 사용되는 방법론입니다. 말하자면 Git-flow는 기능이 아니고 서로간의 약속인 방법론이라는 점입니다. Vincent Driessen도 언급했듯이 Git-flow가 완벽한 방법론은 아니고 각자 개발 환경에 따라 수정하고 변형해서 사용하라고 언급했습니다. Git-flow는 총 5가지의 브랜치를 사용해서 운영을 합니다. master : 기준이 되는 브랜치로 제품을 배포하는 브랜치 입니다. develop : 개발 브랜치로 개발자들이 이 브랜치를 기준으로 각자 작업한 기능들을 합(Merge)칩.. 2023. 7. 25.
document.forms 객체 form에서 사용되는 각종 양식(input, select, textarea) 역시 자바스크립트를 이용하여 제어할 수 있다. 자바스크립트에서는 form에서 사용되는 양식들을 forms 객체에서 정의할 수 있다. forms 객체는 links, images 등과 같은 배열 형태로 document 객체의 하단에 존재하는 객체이다. forms 객체를 제어하는 일은 자바스크립트에서 매우 중요한 일이다. 일반적으로 인트라넷과 같이 고급 기능을 요구하는 경우에 많이 사용된다. forms[] 배열 폼의 구성 요소와 마찬가지로 폼 자체도 배열로 참조되어질 수 있다. 배열의 순서는 구성 요소의 순서와 마찬가지로 HTML 내에서 기술된 순서대로 0번부터 참조되어지며, 그 형식은 document.forms[0]과 같은 방식으로.. 2023. 7. 25.
[Open API] SOAP 란? SOAP나 REST나 둘다 보통 웹 서비스라고 부른다. 이러한 서비스는 기존의 서로 다른 컴퓨터에서 네트워크를 통해 데이터를 주고 받는 통신이라고 생각하면된다. 이러한 웹서비스는 플랫폼에 독립적이며, 연결을 유지하지 않는 특징이 있다. 오늘 제대로 알아볼 내용은 SOAP 인데, Simple Object Access Protocol 의 줄임말이다. 우리가 흔히 하는 HTTP, HTTPS, SMTP 등을 통해 XML 기반의 메시지를 컴퓨터 네트워크 상에서 교환하는 프로토콜이다. SOAP 의 장점은 다음과 같다. -기존의 원격 기술 대비 프록시와 방화벽에 구애 받지 않음 -플랫폼이나 프로그래밍 언어에 독립적임 -에러 처리가 기본적으로 내장 -분산환경에서 사용하기 적합함 -웹 서비스 표준(XSDL, UDDI, .. 2023. 4. 26.
[기본] EDI, EAI, B2Bi, SOA, ESB 란? EDI(전자 문서 교환) EDI(전자 문서 교환) ● EDI(전자 문서 교환) 전자 문서 교환(Electronic Data Interchange, EDI)은 독립된 조직 간에 정형화된 문서를 표준화된 자료표현 양식에 준하여 전자적 통신매체를 이용해 교환하는 방식이다. 예를들어, 기업간 거래에 관한 데이터와 문서를 표준화하여 컴퓨터 통신망으로 거래 당사자간 전송·수신하는 정보전달 시스템이되며, 주문서·납품서·청구서 등 무역에 필요한 각종 서류를 표준화된 양자간 서식 또는 공공서식을 통해 서로 합의된 전자신호로 바꾸어 컴퓨터 통신망을 이용하여 거래처에 전송한다. ■ EDI(전자 문서 교환)의 이점 국내 기업간 거래는 물론 국제무역에서 각종 서류의 작성과 발송, 서류정리절차 등의 번거로운 사무처리가 없어져 처.. 2021. 2. 2.
EHCache를 이용한 캐시 구현 2 캐시의 경우 모든 상황에서 쓸 수 있는 것은 아니다. 아래의 조건을 만족한다면 캐시 사용을 한번 고려해보는 것이 좋다. 반복적으로 동일한 결과를 돌려주는 작업 각 작업의 시간이 오래 걸리거나 서버에 부담을 주는 경우 (외부 API/DB 데이터호출 등) 이제 예제코드로 본론을 시작하겠다. 예제 예제 코드는 SpringBoot + Gradle + Ehcache 2.x + Logback 환경이다. 모든 코드는 Github에서 관리중이니 필요하다면 확인하면 될것 같다. 캐시 기능에 집중하기 위해서 불필요한 설정은 제외하기 위해 선택하였다. 그럼 하나하나 코드를 작성해나가겠다. build.gradle buildscript { ext { springBootVersion = '1.4.1.RELEASE' } repos.. 2021. 2. 2.
EhCache를 이용한 캐시 구현 1 EHCache의 주요 특징 및 기본 사용법 게시판이나 블로그 등 웹 기반의 어플리케이션은 최근에 사용된 데이터가 또 다시 사용되는 경향을 갖고 있다. 80:20 법칙에 따라 20%의 데이터가 전체 조회 건수의 80%를 차지할 경우 캐시를 사용함으로써 성능을 대폭적으로 향상시킬 수 있을 것이다. 본 글에서는 캐시 엔진 중의 하나인 EHCache의 사용방법을 살펴보고, Gaia 시스템에서 EHCache를 어떻게 사용했는 지 살펴보도록 하겠다. EHCache의 주요 특징 EHCache의 주요 특징은 다음과 같다. 경량의 빠른 캐시 엔진 확장(scable) - 메모리 & 디스크 저장 지원, 멀티 CPU의 동시 접근에 튜닝 분산 지원 - 동기/비동기 복사, 피어(peer) 자동 발견 높은 품질 - Hibernat.. 2021. 2. 2.
Spring 과 Spring Boot Spring 과 Spring Boot 웹 애플리케이션 서버를 만들 때 스프링을 이용하는게 가장 일반적일만큼 대한민국 개발자의 스프링 의존도는 상당하다. 요즘에는 Node.js 나 Django 로도 많이 개발을 하지만 가장 익숙한건 아무래도 스프링인 듯 하다. 이번 포스트에서는 스프링이 정확히 어떤 것인지 그리고 스프링 부트와 어떤 차이가 있는지 알아보고자 한다. Spring? 스프링, 정확하게는 스프링 프레임워크이다. 먼저 스프링에 대해 이해하기 위해서는 프레임워크가 무엇인지, 라이브러리와의 차이가 어떤건지 알고 가는게 가장 중요하다. 라이브러리는 간단하게 특정 기능을 하는 코드 뭉치이다. 개발자는 자기 코드에 라이브러리를 포함시키고 원하는 기능을 사용해서 개발을 할 수 있다. 더욱 간단하게는 원하는 기.. 2021. 1. 12.
JVM 아키텍쳐 JVM(Java Virtual Machine) "자바 가상 머신"이라고 불리는 JVM은 자바 프로그램을 실행하고, 다른 언어로 작성된 것도 자바 byte code로 컴파일하여 실행할 수 있기 위하여 만들어졌습니다. 자바의 작동 방식 자바는 기본적으로 "Write once, Run anywhere"의 정신으로 만들어졌습니다. 말 그대로 한 번 작성한 내용은, 어디서든지 읽고 실행될 수 있어야 한다는 말인데요. 흥미롭습니다. C++ 같은 경우에는 특정한 운영체제, 하드웨어에서 실행되기 위해서 컴파일되지만, 자바는 byte code로 컴파일됩니다. 이는 흔히 우리가 보는 .class 파일입니다. 이때 JDK에 포함되어 있는 자바 컴파일러(javac)를 사용하여 컴파일하게 됩니다. 이 Bytecode를 JVM은.. 2021. 1. 4.
반응형