반응형

전체 글 163

Algorithm 3.DFS/BFS

탐색 (Search) 많은 양의 데이터 중에서 원하는 데이터를 찾는 과정으로 그래프, 트리등의 자료구조 안에서 탐색이라는 과정을 사용합니다. 대표적인 탐색 알고리즘으로는 DFS, BFS이 있습니다. 이러한 탐색 알고리즘을 사용하기 위해서는 스택(Stack)과 큐(Queue)라는 자료구조를 사용합니다. 자료구조: 데이터를 표현하고 관리하고 처리하기 위한 구조 스택과 큐는 push(삽입), pop(삭제) 함수들을 사용합니다. push(삽입), pop(삭제)를 사용하기 위해서는 오버플로우(Overflow), 언더플로우(Underflow)를 고려해야 합니다. 오버플로우(Overflow): 스택과 큐 등의 자료구조의 용량이 가득 찬 상태에서 push()를 수행할 경우 발생합니다. 언더플로우(Underflow): ..

백준 2873 롤러코스터 (python)

문제 출처: https://www.acmicpc.net/problem/2873 처음 생각한 접근법 R행 C열 크기의 직사각형을 모눈종이에 그려보고 최대한 많은 경로를 이동하는 방법을 생각했습니다. 여러가지 경우의 수를 생각하다 보니 몇 가지 패턴이 보였습니다. 먼저 R 또는 C 가 홀수일 경우 모든 경로를 탐색 할 수 있었습니다. 즉 기쁨의 숫자와 상관 없이 R, L, U, D 를 조합하면 되었습니다. R이 홀수인 경우는 다음과 같은 패턴으로 이동합니다. C이 홀수인 경우 다음과 같은 패턴으로 이동합니다. 마지막으로 R과 C가 모두 짝수인 경우는 1칸만 방문 못하고 모든 곳을 방문한다고 생각했습니다. 하지만 여기서부터 잘못 생각하여 시간이 많이 뺏겼고 답을 도출해내지 못했습니다. 다음은 제가 생각한 경우..

프로그래머스 SQL(JOIN-1) 없어진 기록 찾기

SQL JOIN SQL에서 JOIN이란 두 개 이상의 테이블(릴레이션)을 연결하여 데이터를 검색하는 방법으로 두 테이블에서 관련된 튜플을 결합하여 하나의 튜플로 만들어 출력합니다. JOIN은 DML중 SELECT에서 조건을 추가할 때 사용하는 방법으로 보통 기본키(PK)와 외래키를 사용하여 JOIN을 합니다. JOIN의 종류를 밴 다이어그램으로 표현하면 다음과 같습니다. 위 그림을 SQL로 표현하면 다음과 같습니다. SELECT FROM [기준 테이블 명] LEFT JOIN [JOIN 되는 테이블] ON [기준 테이블.외래키] = [JOIN 테이블.기본키] 꼭 외래키와 기본키일 필요는 없지만 대부분 외래키, 기본키를 이용하여 코드를 작성한다고 생각하여 위와 같이 작성했습니다. RIGHT JOIN은 LEF..

ProblemSolving/SQL 2022.03.28

스프링 입문 7 - 3.스프링 웹 개발 기초 - MVC와 템플릿 엔진

MVC 과거에는 view와 controller 를 구분하지 않았습니다. 그래서 view에 controller 기능을 넣어서 JSP를 가지고 개발했습니다. 이 방식을 모델 1 방식이라고 부릅니다. 지금은 MVC 패턴 방식으로 개발을 많이 합니다. 개발을 할 때, 기능에 따라 분리해서 개발해야 효율이 늘어나고 유지보수가 수월해집니다. M : Model - 화면에서 필요한 요소를 모델에 담아 View 에 넘겨주는 역할 V : View - 보여지는 것에 초점을 맞추어 개발 C : Controller - 비즈니스 로직과 관련되어 있거나 서버와 관련된 처리하는 데에 집중하여 개발 새로운 controller 생성 HelloController 클래스 HelloController 클래스에 hello-mvc control..

자바 스프링 2022.03.28

스프링 입문 6 - 3.스프링 웹 개발 기초 - 정적 컨텐츠

웹 개발은 크게 3가지 방법으로 나뉩니다. 정적컨텐츠스프링 부트는 정적 컨텐츠 기능을 자동으로 지원합니다. 서버에서 처리나 실행없이 파일을 웹 브라우저에 바로 표현하는 것 MVC와 템플릿 엔진 템플릿 엔진: 정적인 HTML을 바로 웹 브라우저로 보내는 것이 아니라 서버에서 프로그래밍으로 처리 및 변형을 통해 MTML을 동적으로 표현하여 웹 브라우저로 보내는 것입니다. MVC: Model, View, Controller를 통해 템플릿 엔진이 동적으로 웹을 표현하는 것으로 템플릿 엔진을 통해 View를 표현합니다. 요즘은 MVC와 템플릿 엔진으로 개발을 많이 함 API JSON 데이터 포맷으로 데이터를 전송하는데 정적 컨텐츠 스프링 부트 문서에서 정적 컨텐츠에 대한 설명을 확인할 수 있습니다. 링크: 스프링..

자바 스프링 2022.03.28

백준 10610 30 (python)

문제 출처: https://www.acmicpc.net/problem/10610 풀이 제 코드는 다음과 같습니다. import sys num = sys.stdin.readline().rstrip() def sol(): if '0' not in num: #입력에 0 이 없으면 30 배수 안되므로 -1 print(-1) return num_list = list(num) # num_list.sort(reverse=True) # SUM = 0 for i in range(len(num_list)): # 각 자리수의 합이 3의 배수이면 num은 3의 배수 SUM += int(num[i]) if SUM % 3 == 0: print("".join(num_list)) return else: print(-1) return..

백준 10989 수 정렬하기 3 (python)

문제 출처: https://www.acmicpc.net/problem/10989 오답 분석 저는 먼저 파이썬에 내장된 정렬 함수인 sort를 이용해서 풀려고 했습니다. 하지만 저번 2751 수 정렬하기 2 문제와 다르게 메모리 초과가 발생했습니다. 그 이유는 입력되는 정수의 개수 N과 입력되는 정수의 최대 값 n의 차이를 제대로 파악하지 못했으며, 메모리 범위를 고려하지 않아 문제가 발생하였습니다. 아래는 제가 처음 제출한 코드입니다. 이 문제의 핵심은 메모리의 최대값은 8MB인 것과 입력되는 정수의 개수 N의 범위는 (1 ≤ N ≤10,000,000)라는 것입니다. 파이썬에서 정수 값은 기본적으로 4byte 메모리를 할당합니다. 만약 모든 데이터의 입력을 리스트에 저장한다면 4byte * 10,000,..

백준 2751 수 정렬하기 2 (python)

문제 출처: https://www.acmicpc.net/problem/2751 오답 분석 저는 먼저 파이썬에 내장된 정렬 함수인 sort와 sorted를 이용해서 풀려고 했습니다. 하지만 모두 시간 초과가 발생했습니다. 이를 해결하기 위해 바로 구글링을 하여 답을 찾지 않고 다음과 같은 생각과 과정을 통해 문제를 해결 하려고 했습니다. 파이썬의 정렬 내장함수인 sort와 sorted가 O(NlogN) 시간 복잡도를 가지고 정렬을 한다는데 이 정렬 알고리즘보다 더 빠른 퀵정렬 알고리즘을 사용해야 하나? -> 정답은 아니었습니다. 퀵정렬 또한 O(NlogN) 이라는 시간복잡도를 가지고 있어 똑같이 시간초과라는 문제가 발생했습니다. 1번도 아니라면 계수 정렬이라는 특수한 정렬알고리즘을 사용해야하나? -> 결과..

스프링 입문 3 - 2.프로젝트 환경설정 - 빌드하고 실행하기

시스템 환경 제 노트북 환경은 다음과 같습니다. java 11, windows 10 gradlew로 빌드하기 저는 프로젝트 Hellospring 폴더 주소창에서 cmd 를 입력하고 gradlew 로 빌드를 했더니 다음과 같은 에러가 발생했습니다. ERROR: JAVA_HOME is set to an invalid directory: ~~~~~ Please set the JAVA_HOME variable in your environment to match the location of your Java installation. 이는 Java 환경 변수 경로를 잘못 설정한 에러때문에 발생하는것으로 파악됩니다. 저도 초기에 설명을 따라 JAVA_HOME의 주소를 C:\Program Files\Java\jdk-1..

자바 스프링 2022.03.28

스프링 입문 3 - 2.프로젝트 환경설정 - View 환경설정

Error 페이지를 Welcome Page 만들기 src > main > java > resources > static 폴더에서 우클릭을 눌러 New > file을 클릭하고 새로운 file 하나를 생성합니다. 파일명은 index.html을 입력합니다. 그리고 다음 html 코드를 입력합니다. Hello hello main 을 실행하고 브라우저에서 http://localhost:8080/ 를 입력하면 다음과 같은 페이지를 확인할 수 있습니다. 이렇게 welcome 페이지를 쉽게 제작할 수 있습니다. 스프링 부트는 스프링 생태계를 감싸서 편리하게 개발하는데 도움을 줍니다. 스프링은 java enterprise web 애플리케이션 개발과 관련된 생태계를 모두 제공하므로 매우 광범위합니다. 그래서 모두 사용하지..

자바 스프링 2022.03.28

스프링 입문 3 - 2.프로젝트 환경설정 - 라이브러리 살펴보기

라이브러리 살펴보기 External Libraries를 통해 Gradle이 알아서 당겨온 라이브러리를 확인할 수 있습니다. IntelliJ에서 왼쪽 하단의 네모 아이콘을 누르면 오른쪽 상단에 Gradle 메뉴가 생성되는것을 확인할 수 있습니다. 여기서의 Dependencies가 라이브러리의 의존관계를 나타내며 저는 초기 spring boot starter를 통해 web와 thymeleaf 라이브러리만 가져왔으나 web와 thymeleaf이 필요한 라이브러리는 알아서 가져온 것을 확인할 수 있습니다. 즉 web 라이브러리가 tomcat 라이브러리를 Embeded 하고 있습니다. 요즘에는 예쩐과 달리 tomcat 서버, WAS를 따로 설치하지 않고 이런 방식으로 라이브러리 하나만을 빌드해서 웹서버를 띄어 편..

자바 스프링 2022.03.28

스프링 입문 2 - 2.프로젝트 환경설정 - 프로젝트 생성

프로젝트 생성 사전 준비 - java 11 설치 - IDE: IntelliJ 또는 Eclipse 설치 스프링 부트 스타터 사이트로 이동해서 스프링 프로젝트 생성합니다 예전에는 스프링 프로젝트를 처음부터 다 만들었다면 요즘은 대부분 스프링 부트로 스프링 프로젝트를 만듭니다. - URL : 실제 프로젝트 생성 Project 필요한 라이브러리를 가져오고 빌드하는 라이프 사이클까지 모두 관리해주는 툴 과거는 Maven으로 만들었지만 요즘은 Gradle로 넘어오는 추세입니다. Language Java Spring Boot 버전을 선택해야하는데 SNAPSHOT, M1은 정식 릴리즈된 버전이 아니므로 선택하지말고 정식 버전인 2.6.X을 선택해야 합니다. Group 보통 기업의 도메인이나 이름을 넣지만 입문자는 크게..

자바 스프링 2022.03.28

스프링 입문 1 - 1.강의소개 - 강의소개

왜 Spring을 배워야 하는가? 실무에서 제대로 작동하는 웹 어플리케이션을 제작하기 위해 스프링을 학습해야 함 실제 동작하는 간단한 웹 어플리케이션 개발 과정 스프링 프로젝트 생성 스프링 부트로 웹 서버 실행 회원 도메인 개발 웹 MVC 개발 DB 연동 -JDBC, JPA, 스프링 데이터 JPA 테스트 케이스 작성 프로젝트 사용기술 JPA (Java Persistence API) 강의 목표 스프링 학습의 제대로 된 첫 길잡이 역할 스프링 기술 그 자체에 매몰되지 않고 어떻게 사용해야 하는지에 초점 오래된 스프링 기술과 마이너한 기술은 배제 실무에서 필요한 최신 개발 트렌드 반영하여 스프링 학습 학습 방법 처음 부터 끝까지 코딩 스프링 완전 정복 로드맵 스프링 입문 (V) 스프링 핵심 원리 스프링 웹 M..

카테고리 없음 2022.03.28

SQL - MySQL 이란

MySQL 소개 MySQL은 가장 널리 사용되고 있는 관계형 데이터베이스 관리 시스템(RDBMS: Relational DBMS). MySQL은 오픈 소스이며, 다중 사용자와 다중 스레드를 지원합니다. C언어, C++, JAVA, PHP 등 여러 프로그래밍 언어를 위한 다양한 API를 제공합니다. MySQL은 유닉스, 리눅스, 윈도우 등 다양한 운영체제에서 사용할 수 있으며, 특히 PHP와 함께 웹 개발에 자주 사용합니다. MySQL은 오픈 소스 라이센스를 따르기는 하지만, 상업적으로 사용할 때는 상업용 라이센스를 구입해야 합니다. 출처: http://www.tcpschool.com/mysql/mysql_intro_intro MySQL 장점 오픈 소스 라이센스를 따르기 때문에 커뮤니티 버전은 무료로 사용할..

ProblemSolving/SQL 2022.03.28

백엔드 - 스프링(Spring)이란

Framework 프레임워크 프레임워크는 소프트웨어를 만들때 뼈대가 되는 부분으로 큰틀을 제공하여 그 클에 맞춰 코딩하는 것이라면 라이브러리는 상용할수 있는 함수들의 모임으로 라이브러리를 호출하여 능동적으로 사용 가능 프레임워크의 장점: 개발에 필요한 구조를 이미 코드로 만들어 놓음 → 실력이 다소 부족한 개발자라고 하더라도 필요한 부분만 조립하는 형태로 개발이 가능 → 개발이 쉬워지고 시간이 단축되며 일정한 틀 안에서 개발하기 때문에 어느정도 품질을 보장 받음 출처: https://freestrokes.tistory.com/79 프레임워크와 라이브러리 차이 제어 흐름에 대한 주도성이 누구에게/어디에 있는가 즉 어플리케이션의 Flow(흐름)를 누가 쥐고 있느냐에 따른 차이가 있습니다. 라이브러리는 사용자..

자바 스프링 2022.03.28

백준 11055 가장 큰 증가 부분 수열 (python)

문제 출처: https://www.acmicpc.net/problem/11055 오답 정리 이 문제의 점화식과 규칙은 11053 문제의 유형과 너무 비슷했기 때문에 빠르게 찾을 수 있었다. 하지만 사소한 실수로 인해 시간을 너무 많이 뺏기고 문제를 풀지 못하는 불상사가 발생했습니다. 어디가 문제였는지 틀린 코드와 맞은 코드를 한눈에 비교하면서 분석해보도록 하겠습니다. 위 그림에서 차이점을 찾을 수 있나요? 저는 처음에 큰 문제가 없을 줄 알고 왼쪽처럼 코딩을 했습니다. 하지만 이렇게 코딩을 한 경우 예제는 커버가 되지만 모든 tast case를 만족 시킬수 없었습니다. 그럼 어디서 문제가 발생하였을까요? 다름 아니라 dp의 초기값에서 문제가 발생했습니다. 저는 DP문제를 풀 때 무의식적으로 dp = [0..

ProblemSolving/DP 2022.03.28

Algorithm 1.DP

동적 프로그래밍, 동적 계획법 (Dynamic Programing) 다이나믹(Dynamic)의 유래 다이나믹 프로그래밍에서 다이나믹의 의미는 동적할당의 다이나믹과 다릅니다. 동적할당에서 다이나믹은 프로그램이 실행되는 도중에 메모리를 동적으로 할당하는 자료구조 기법으로 메모리 공간을 낭비하지 않기 위해 사용합니다. 하지만 다이나믹 프로그래밍에서 다이나믹의 의미는 크게 의미를 부여하지 않습니다. 다이나믹 프로그래밍을 먼저 만든 사람도 이름이 단지 멋있어서 다이나믹을 붙였다고 합니다. DP의 장점 다이나믹 프로그램이은 메모리 공간을 사용하여 연산속도를 높이는 장점이 있습니다. DP의 방식 2가지 탑-다운 (Top-Down) DP의 대표적인 문제인 피보나치 수열을 간단하게 탑 다운 방식으로 코드를 작성하면 다음..

ProblemSolving/DP 2022.03.28

백준 2156 포도주 시식 (python)

문제 출처: https://www.acmicpc.net/problem/2156 접근 방법 각 잔의 순서를 a1 a2 a3 a4 a5 a6 ai (현재 i = 7) 이라고 하면, 포도주를 마시는 경우의 수는 다음 3개의 경우의 수만 존재합니다. 이를 점화식으로 나타내면 다음과 같습니다. n = int(input()) array = [0]*(n+1) dp = [0]*(n+3) for i in range(1, n+1): array[i] = int(input()) dp[1] = array[1] MAX = 0 for i in range(1, n+1): dp[i] = max(dp[i-1], dp[i-2]+array[i], array[i-1]+ array[i] + dp[i-3]) print(dp[n]) 문제점, 시간..

ProblemSolving/DP 2022.03.28
1 ··· 5 6 7 8 9
반응형