728x90

전체 글 103

[백준 1697] 숨바꼭질 - 파이썬

백준 1697 - 숨바꼭질* 풀이과정 우선, 최단 시간을 찾는 문제이기 때문에 BFS를 활용한다. 1) 위치별 도달하는 최단 시간을 저장할 배열, 방문 처리 배열을 선언한다.2) 큐에 수빈이의 위치를 넣고, 방문 처리한다.3) 문제에서 수빈이가 갈 수 있는 방향은 3가지(+1, -1, *2)이므로, 방문 여부를 체크하여 큐에 넣는다. ※ 수빈이가 갈 수 있는 3가지 방향을 if 문으로 나누었는데, for in을 사용하면 중복 코드를 줄일 수 있다.import sysfrom collections import dequeN, K = map(int, sys.stdin.readline().split())time = [0 for _ in range(100001)]visited = [False for _ in ran..

알고리즘 2024.05.23

[백준 2178] 미로 탐색 - 파이썬 (BFS, DFS 어떤 방법을 선택해야 할까)

백준 2178 - 미로 탐색(언제쯤 적응될까 싶은 DFS, BFS...)일단 탐색 문제는 DFS, BFS 중 어떤 방식을 사용해야 할지 문제에 따라 선택할 수 있어야 한다. DFS는 재귀적인 특징과 백트래킹을 이용하여 모든 경우를 하나씩 전부 탐색해야 하는 경우에 적합하며,BFS는 최단거리나 최단횟수와 같이 최적의 답을 찾아야 하는 경우에 적합하다. 2178번 문제의 경우, 최단 경로를 구해야 하므로 BFS를 활용하면 된다. 1) 시작점을 큐에 넣는다.2) 큐의 가장 앞에 위치한 요소를 뽑아(`.popleft`) 방문처리한다.3) 방문처리한 해당 요소의 인접한 요소 중 방문가능한 요소를 큐에 넣는다. import sysfrom collections import dequeN, M = map(int, sys..

알고리즘 2024.05.22

[디자인 패턴] 프록시 패턴

프록시 (Proxy) 패턴어떠한 객체를 대리하여 대신 처리하게 함으로써, 로직의 흐름을 제어하는 행동 패턴이다. 즉, 클라이언트가 대상 객체를 직접 참조하는 것이 아니라, 중간에 프록시라는 대리인을 거쳐서 접근하는 코드 패턴이다.대상 객체의 메서드를 직접 실행하는 것이 아니라, 프록시 객체의 메서드에 접근한 후 추가적인 로직을 처리한 뒤 접근하게 된다.  프록시 패턴의 구조`RealSubject`: 원본 대상 객체`Proxy`: 대상 객체(RealSubject)를 중계할 대리자 역할`Subject`: `RealSubject`와 `Proxy`를 하나로 묶는 인터페이스 (대상 객체와 프록시의 역할을 동일하게 하는 추상 메서드(operation())을 정의함) 예를 들어, 아래와 같은 여행 예약 시스템이 있다..

CS스터디 2024.05.06

[디자인패턴] 팩토리 메서드 패턴, 추상 팩토리 패턴

팩토리 패턴은 객체를 생성하는 역할을 별도의 클래스(Factory)에게 위임하는 것이 핵심이다팩토리 패턴인 팩토리 메서드 (Factory Method) 패턴과 추상 팩토리 (Abstract Factory) 패턴은 Simple Factory를 베이스로 하여, 별도의 클래스를 통해 특정 객체를 생성하도록 한다.0. Simple Factory별도의 클래스(Factory)에서 생성자를 호출하도록 하여, 클라이언트 코드에서는 팩토리를 통해 객체를 생성하는 방식이다.예를 들어, 인터페이스 `Pet`과 이를 구현하는 `Cat`, `Dog` 클래스가 있다고 가정한다.public interface Pet {}public class Cat implements Pet {}public class Dog implements P..

CS스터디 2024.05.06

[포스코x코딩온] 웹 풀스택 과정 18주차 회고 | Spring JPA

📌 JPA JPA(Java Persistence API)는 Java 진영의 ORM 기술 표준으로, 적합한 SQL을 생성하여 DB에 전달하고, 객체를 자동으로 매핑해준다. (SQL을 직접 작성할 필요가 없음) 장점 생산성이 뛰어나고 유지보수가 용이하다. DBMS에 대한 종속성이 줄어든다. 단점 JPA의 장점을 살려 잘 사용하기 위해서는 학습 비용이 높고, 복잡한 쿼리를 사용할 때 불리하다. 잘못 사용할 경우 SQL을 직접 사용하는 것보다 성능이 떨어질 수 있다. 📌 Entity 데이터베이스에 쓰일 필드와 여러 Entity 간의 관계를 설정하는 것이다. (myBatis에서의 sql, xml, domain 역할) @Entity를 이용해 해당 클래스가 Entity임을 알려준다. JPA에 정의된 필드를 바탕으로 ..

[포스코x코딩온] 웹 풀스택 과정 18주차 회고 | Spring JDBC, MyBatis

SQL Mapper와 ORM Spring은 대표적으로 SQL Mappler와 ORM을 데이터베이스와의 상호작용 방식으로 갖는다. 두 방식 모두 Java 객체와 데이터베이스 간의 상호 작용을 한다는 공통점이 있다. 📌 SQL Mapper 주요 목적: SQL 쿼리와 Java 메서도/객체 간의 매핑을 중심으로 한다. SQL 쿼리를 직접 작성해야 하며, 해당 쿼리의 결과를 Java 객체에 매핑한다. 동적 SQL 생성, 조건문, 반복문 등의 SQL 작성에 보다 유연하다. SQL 쿼리의 세밀한 튜닝이 필요할 때 주로 사용한다. 예: JDBCTemplate, MyBatis 📌 ORM 주요 목적: Java 객체와 데이터베이스 테이블 간의 관계를 매핑한다. Java 객체 (Entity)가 데이터베이스 테이블과 어떻게 매..

[포스코x코딩온] 웹 풀스택 과정 18주차 회고 | Spring REST API

REST, REST API, RESTful 📌 REST REST(Reperesentational State Transfer)는 서버와 클라이언트 통신 방법 중 하나로, http URI를 통해 자원을 명시하고, http method(Get, Post, Put, Delete)를 이용하여 자원을 교환하는 통신방법이다. (자원: 해당 소프트웨어가 관리하는 모든 것. 문서, 그림, 데이터, 해당 소프트웨어 자체 등) 장점 http 프로토콜의 인프라를 그대로 사용하므로, REST API 사용을 위한 별도의 인프라를 구축할 필요가 없다. http 표준 프로토콜을 따르는 모든 플랫폼에서 사용 가능하다. 서버와 클라이언트의 역할을 명확하게 분리한다. 단점 http method 형태가 제한적이다. 구형 브라우저(IE)에서..

[포스코x코딩온] 웹 풀스택 과정 18주차 회고 | Spring Bean

Bean Spring IoC 컨테이너가 관리하는 Java 객체이다. 의존성 관리가 용이하다. 동일한 객체를 여러 번 만들지 않고, 하나를 만들어 재사용한다는 점에서, 메모리를 절약할 수 있다. Bean 등록방법 방법 1) @Component 이용 클래스 선언부 위에 @Component 어노테이션. 방법 2) 자바 설정 클래스 직접 만들기 설정 클래스를 만들고 @Configuration 어노테이션 후, 해당 크래스 안의 메소드에 @Bean 어노테이션. record Person(String name, int age) {} // record: getter, setter, 생성자 등을 자동으로 생성 record Address(String address, int postcode) {} @Configuration/..

[포스코x코딩온] 웹 풀스택 과정 17주차 회고 | Spring

Spring Java 기반의 웹 어플리케이션을 만들 수 있는 백엔드 프레임워크이다. 자바스크립트에서 Node.js를 통해 웹서버를 개발한다면, 자바에서는 Spring을 이용하여 웹 서비스를 만들 수 있다. 📌 Spring 구조 📌 Spring 특징 스프링은 특정 기술에 종속되지 않으면서, 객체를 관리할 수 있는 컨테이너를 제공한다. 1) IoC IoC (Inversion of Control): 제어의 반전 (코드의 흐름을 제어하는 주체가 바뀐 패턴) 객체의 라이프사이클(생성부터 소멸까지)을 개발자가 직접 하는 것이 아니라, Spring Container가 대신 한다. 제어권이 개발자가 아닌 IoC에 있다. IoC가 개발자의 코드를 호출해 필요한 객체를 생성, 소멸하여 라이프사이클을 관리한다. 2) DI ..

[포스코x코딩온] 웹 풀스택 과정 17주차 회고 | JAVA 래퍼, 제네릭, 콜렉션

📌 Wrapper 클래스 8가지 기본 데이터 타입을 객체로 표현하기 위해 제공되는 클래스이다. byte - Byte short - Short int - Integer long - Long float - Float double - Double char - Character boolean - Boolean Wrapper의 사용 자바의 컬렉션(ex. ArrayList)은 기본 데이터 타입을 직접 저장할 수 없어, Wrapper 클래스를 사용하여 저장해야 한다. 오토박싱(auto-boxing): 기본 데이터 타입을 Wrapper 클래스 객체로 자동 변환한다. 오토언박싱(auto-unboxing): Wrapper 클래스 객체를 기본 데이터 타입으로 자동 변환한다. 오토박싱, 오토언박싱으로 자동으로 타입 변환되어도..

728x90