본문 바로가기

전체 글153

[백준] 연구소 14502번 (Python) 문제 인체에 치명적인 바이러스를 연구하던 연구소에서 바이러스가 유출되었다. 다행히 바이러스는 아직 퍼지지 않았고, 바이러스의 확산을 막기 위해서 연구소에 벽을 세우려고 한다. 연구소는 크기가 N×M인 직사각형으로 나타낼 수 있으며, 직사각형은 1×1 크기의 정사각형으로 나누어져 있다. 연구소는 빈 칸, 벽으로 이루어져 있으며, 벽은 칸 하나를 가득 차지한다. 일부 칸은 바이러스가 존재하며, 이 바이러스는 상하좌우로 인접한 빈 칸으로 모두 퍼져나갈 수 있다. 새로 세울 수 있는 벽의 개수는 3개이며, 꼭 3개를 세워야 한다. 예를 들어, 아래와 같이 연구소가 생긴 경우를 살펴보자. 2 0 0 0 1 1 0 0 0 1 0 1 2 0 0 1 1 0 1 0 0 0 1 0 0 0 0 0 0 0 0 0 0 1 1 .. 2022. 1. 1.
[Java] JPA, MySQL연동 (Entity), JPA를 통한 CRUD JPA (Java Persistence API)? ORM(Object Relational Mapping)으로 인터페이스의 모음이다. RDB 데이터베이스의 정보를 객체지향으로 손쉽게 활용할 수 있도록 도와주는 도구이다. Object(객체)와 Relation(관계형 DB) 둘 간의 맵핑을 통해서 보다 손쉽게 적용할 수 있는 기술을 제공해준다. 또한 쿼리에 집중하기 보다는 객체에 집중함으로써, 조금 더 프로그래밍 적으로 많이 활용할 수 있다. MySQL연동하기 mysql.server start 의존성 추가 jpa, mysql dependencies { implementation('org.springframework.boot:spring-boot-starter-data-jpa') implementation('m.. 2021. 12. 31.
[Java] Lombok(롬복)이란? Lombok설치 Lombok(롬복) 이란? Java 라이브러리로 반복되는 getter, setter, toString .. 등의 반복 메서드 작성 코드를 줄여주는 코드 다이어트 라이브러리 이다. Lombok은 여러 어노테이션(@)을 제공하고 이를 기반으로 반복 소스코드를 컴파일 과정에서 생성해주는 방식으로 동작하는 라이브러리이다. Lombok 장점 어노테이션 기반의 코드 자동생성을 통한 생산성 향상 반복코드 다이어트를 통해 가독성 및 유지보수성 향상 Getter/Setter외 빌더 패턴이나 로그생성 등 다양한 방면으로 활용가능 Lombok 적용 방법 Intellij 기준 Preferences-Plugins-Marketplace lombok 검색 (이미 설치 되어 있을 수 있음) lombok라이브러리를 Gradle에 의존.. 2021. 12. 30.
[Java] Object 클래스 & Class 클래스 - toString(), equals(), hashCode(), clone(), forName() 모든 클래스의 최상위 클래스이다. java.lang.Object 클래스 (따로 import하지 않아도 된다.) 모든 클래스는 Object클래스에서 상속 받는다. 모든 클래스는 Object클래스의 메소드를 사용할 수 있다. 모든 클래스는 Object클래스의 일부 메서드를 재정의 하여 사용할 수 있다. (final로 정의된 메서드가 있기 때문) Object클래스의 toString메서드 toString()메서드의 원형: getClass().getName() + '@' + Integer.toHexString(hashCode()) 객체의 정보를 String으로 바꾸어 사용할 때 유용하다. package Object; class Book{ String title; String author; public Book(S.. 2021. 12. 29.
[백트래킹] N-Queen문제 백트래킹이란? 해를 찾기 위해 DFS방식으로 탐색하다가 해당 루트가 유망한지(Promising) 검사하여 조건이 맞지 않다면 가지치기(Pruning)하고 다른 루트로 돌아가 최적의 해를 찾는 방법이다. 상태 공간 트리(State Space Tree) 문제 해결 과정의 중간 상태를 각각의 노드로 나타낸 트리이다. N-Queen문제 대표적인 백트레킹 문제이다. 백준 9663번 문제: https://www.acmicpc.net/problem/9663 n = int(input()) row = [250] * n answer = 0 #현재 레벨에서 놓을 수 있는지 없는지 체크하는 함수 (행[자동 생략], 열, 대각선) def can(level): for i in range(level): if row[level] =.. 2021. 12. 28.
[Java] 인터페이스, 추상클래스 인터페이스 차이 인터페이스는 객체에 대한 명세이다. (어떤 메소드를 제공할건지, 어떤 역할은 하는 객체인지에 대한 설명서라고 본다.) 인터페이스의 요소 추상메서드: 모든 메서드는 추상메서드이다. 상수: 선언된 모든 변수는 상수로 처리 됨 디폴트 메서드: 기본 구현을 가지는 메서드(재정의 가능) 정적 메서드: 인스턴스 생성과 상관없이 인터페이스 타입으로 호출하는 메서드 private메서드: 인터페이스 내에서 사용하기 위해 구현한 메서드(재정의 x) 인터페이스 선언과 구현 public interface Calc { double PI = 3.14; int ERROR = -99999999;//인터페이스에서 선언한 변수는 컴파일 과정에서 상수로 변환된다.(public static final) int add(int a, int b.. 2021. 12. 27.
[백준] 어린왕자 1004번 (Python) 문제 어린 왕자는 소혹성 B-664에서 자신이 사랑하는 한 송이 장미를 위해 살아간다. 어느 날 장미가 위험에 빠지게 된 것을 알게 된 어린 왕자는, 장미를 구하기 위해 은하수를 따라 긴 여행을 하기 시작했다. 하지만 어린 왕자의 우주선은 그렇게 좋지 않아서 행성계 간의 이동을 최대한 피해서 여행해야 한다. 아래의 그림은 어린 왕자가 펼쳐본 은하수 지도의 일부이다. 빨간 실선은 어린 왕자가 출발점에서 도착점까지 도달하는데 있어서 필요한 행성계 진입/이탈 횟수를 최소화하는 경로이며, 원은 행성계의 경계를 의미한다. 이러한 경로는 여러 개 존재할 수 있지만 적어도 3번의 행성계 진입/이탈이 필요하다는 것을 알 수 있다. 위와 같은 은하수 지도, 출발점, 도착점이 주어졌을 때 어린 왕자에게 필요한 최소의 행성.. 2021. 12. 26.
[백준] 나무 자르기 2805번 (Python) 시간초과? 문제 상근이는 나무 M미터가 필요하다. 근처에 나무를 구입할 곳이 모두 망해버렸기 때문에, 정부에 벌목 허가를 요청했다. 정부는 상근이네 집 근처의 나무 한 줄에 대한 벌목 허가를 내주었고, 상근이는 새로 구입한 목재절단기를 이용해서 나무를 구할것이다. 목재절단기는 다음과 같이 동작한다. 먼저, 상근이는 절단기에 높이 H를 지정해야 한다. 높이를 지정하면 톱날이 땅으로부터 H미터 위로 올라간다. 그 다음, 한 줄에 연속해있는 나무를 모두 절단해버린다. 따라서, 높이가 H보다 큰 나무는 H 위의 부분이 잘릴 것이고, 낮은 나무는 잘리지 않을 것이다. 예를 들어, 한 줄에 연속해있는 나무의 높이가 20, 15, 10, 17이라고 하자. 상근이가 높이를 15로 지정했다면, 나무를 자른 뒤의 높이는 15, 15.. 2021. 12. 24.
[백준] 랜선 자르기 1654번 (Python) 문제 집에서 시간을 보내던 오영식은 박성원의 부름을 받고 급히 달려왔다. 박성원이 캠프 때 쓸 N개의 랜선을 만들어야 하는데 너무 바빠서 영식이에게 도움을 청했다. 이미 오영식은 자체적으로 K개의 랜선을 가지고 있다. 그러나 K개의 랜선은 길이가 제각각이다. 박성원은 랜선을 모두 N개의 같은 길이의 랜선으로 만들고 싶었기 때문에 K개의 랜선을 잘라서 만들어야 한다. 예를 들어 300cm 짜리 랜선에서 140cm 짜리 랜선을 두 개 잘라내면 20cm는 버려야 한다. (이미 자른 랜선은 붙일 수 없다.) 편의를 위해 랜선을 자르거나 만들 때 손실되는 길이는 없다고 가정하며, 기존의 K개의 랜선으로 N개의 랜선을 만들 수 없는 경우는 없다고 가정하자. 그리고 자를 때는 항상 센티미터 단위로 정수길이만큼 자른다.. 2021. 12. 22.