![[백준 9465] 스티커](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdna%2Fb62FGB%2FbtsJkVgs05P%2FAAAAAAAAAAAAAAAAAAAAAItJl5-ql_Eek-nC30goug2Mi045Db6KivJ2sv7QTLuJ%2Fimg.png%3Fcredential%3DyqXZFxpELC7KVnFOS48ylbz2pIh7yKj8%26expires%3D1756652399%26allow_ip%3D%26allow_referer%3D%26signature%3D4xejRLwKNn6JVx4AFp3f8md7UEA%253D)
[백준 9465] 스티커
문제접근DP 사용해서 이전의 결과값을 사용해서 효율적인 계산을 진행하였다.예시스티커를 뗀 부분이 O이고찢겨진 부분은 X라고 하자.(0,2) 위치의 스티커를 뗀 경우는 아래와 같이 나누어진다. 지금 목표는 스티커를 뗀 경우 중 가장 큰 값을 얻었을 때이기 때문에 이때 둘 중에 큰 값을 선택하고 (0,2) 위치의 스티커 값을 더해주면 된다.이외에 아무것도 떼지 않은 경우(1,1) 위치의 스티커를 뗀 경우 (0,3) 위치의 스티커를 뗀 경우는 아래와 같이 나누어진다. (1,2) 위치의 스티커를 뗀 경우(1,1) 위치의 스티커를 뗀 경우해당 값 중에 큰 값을 선택하고 (0,3) 위치의 스티커 값을 더해주면 된다. 그러면 아래와 같은 점화식을 얻을 수 있다.구한 점화식을 코드에 적용하면 아래 코드와 같다.코드im..
![[백준 14502] 연구소](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdna%2Fbu0DuK%2FbtsJgBWPjZ6%2FAAAAAAAAAAAAAAAAAAAAAPs2P0ZTbGkGQuuuihZcysJBC7hQeBGcLqYOvahACnU1%2Fimg.png%3Fcredential%3DyqXZFxpELC7KVnFOS48ylbz2pIh7yKj8%26expires%3D1756652399%26allow_ip%3D%26allow_referer%3D%26signature%3DqSfyxXhe1Jw%252FlxT9YOOp%252FsXzC9s%253D)
[백준 14502] 연구소
문제접근완전 탐색을 통해서 현재 주어진 맵에서 벽 3개를 세우는 모든 경우의 수를 구해야 한다고 생각했다. -> 백트래킹경우의 수 별로 바이러스가 퍼진 것을 파악해 안전지대가 최대 크기인 경우를 출력해야 한다고 생각했다.이 때 바이러스가 퍼진 것은 BFS를 통해서 구현하고자 했다.풀이입력 처리 및 초기화:BufferedReader와 StringTokenizer를 사용하여 입력을 처리하고, 격자 크기(N x M)와 map 배열을 초기화합니다.map 배열에는 현재 연구소의 상태를 저장하고, tempMap 배열은 바이러스가 퍼졌을 때의 상태를 저장합니다.벽 설치 (buildWalls 메소드):3개의 벽을 세우기 위해 백트래킹을 사용합니다.벽이 3개 설치되면 (count == WALL_COUNT), 바이러스가 ..
![[백준 1238] 파티](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdna%2FdopziG%2FbtsJfDzXKPt%2FAAAAAAAAAAAAAAAAAAAAADEF7lZhvdEjOJ1XwBK2I2jc8d0tMguAXms7ohYtaPMu%2Fimg.png%3Fcredential%3DyqXZFxpELC7KVnFOS48ylbz2pIh7yKj8%26expires%3D1756652399%26allow_ip%3D%26allow_referer%3D%26signature%3DCZu%252B6A6KDmUaNgamP4mjk0eLzS8%253D)
[백준 1238] 파티
문제접근가중치 O방향 O방향과 가중치가 있는 그래프이기 때문에 클래스를 활용한 인접리스트를 구현하였다.그 후에 모든 학생이 위치한 노드로부터 X(파티 장소) 까지로의 최단 거리와 X(파티 장소) 에서 다시 자신이 위치한 마을로 돌아가는 최단 거리를 합친 것 중 가장 큰 값을 출력해야 하기 때문에 다익스트라 알고리즘을 사용하였다.다익스트라 알고리즘은 그래프에서 하나의 시작 노드로부터 다른 모든 노드까지의 최단 경로를 구하는 알고리즘입니다. 이 알고리즘은 가중치가 있는 그래프에서 동작하며, 음의 가중치가 없는 그래프에 적합합니다.다익스트라 알고리즘은 음의 가중치를 가진 그래프에서 사용할 수 없습니다. 음의 가중치가 있는 경우, 벨만-포드 알고리즘과 같은 다른 알고리즘을 사용해야 합니다.문제 풀이가중치 있는 ..

Spring Boot와 MyBatis의 연동 - Maven 의존성 설정
안녕하세요! 항상 나아가는 개발자 pink_salt 핑솔입니다! 코드프레소 Java 웹 개발 체험단 활동을 하고 있습니다. 이제는 Spring Boot와 MyBatis의 연동에 대해서 공부해보겠습니다. 'Spring Boot 웹 개발 초급'강의를 듣고 공부한 내용을 정리하여 포스팅을 진행하였습니다. Spring Boot에서 MyBatis 설정 1. Maven 의존성 설정 -> MyBatis 및 H2 Database 2. 스프링 애플리케이션 설정 -> application.properties 설정 Maven Java프로젝트에서 사용되는 빌드 자동화 도구 소스코드를 실행 가능한 SW 산출물로 만드는 과정인 빌드를 해주는 도구입니다. Maven의 2가지 주요기능으로는 1. 프로젝트 구성 및 빌드 관리 2. 라..

Spring Boot와 MyBatis의 연동 - Data Access Layer의 개념
안녕하세요! 항상 나아가는 개발자 pink_salt 핑솔입니다! 코드프레소 Java 웹 개발 체험단 활동을 하고 있습니다. 저번 게시물에서는 Spring Bean의 개념과 의존성 주입에 대해서 공부해보았습니다. 이제는 Spring Boot와 MyBatis의 연동에 대해서 공부해보겠습니다. 'Spring Boot 웹 개발 초급'강의를 듣고 공부한 내용을 정리하여 포스팅을 진행하였습니다. Data Access Layer Database에 접근하여 데이터 저장, 조회 등을 수행하는 역할 입니다. Service와 Database 사이의 추상화 된 계층입니다. 추상적이기 때문에 Database 기술이 변경되면 Data Access Layer의 코드는 변경될 수 있지만 Service계층의 코드는 변경되지 않습니다...

Clean Code이란 무엇인가? 왜 필요한가? (1)
안녕하세요~ 항상 나아가는 개발자 pink_salt 핑솔입니다! 코드프레소 Java 웹 개발 체험단 활동을 하고 있습니다. 코드를 유지보수하는데 정말 중요한 개념인 Clean Code에 에 대해서 알아봅시다~ 고고! 이번엔 'SW 유지보수성 향상을 위한 Clean Code' 강의를 듣고 공부한 내용을 정리하여 네 번째 포스팅을 진행하겠습니다. Clean Code를 왜 배워야 하는가? 프로그램은 우선 사람이 이해할 수 있어야 한다. 컴퓨터에서 실행되는가는 부차적인 문제다. - Donald Knuth 컴퓨터가 이해하는 코드는 어느 바보나 작성할 수 있다. 좋은 프로그래머는 사람이 이해하는 코드를 작성한다. - Martin Fowler SW 엔지니어는 코드를 작성하는 시간의 10배를 코드를 읽고 이해하는데 쓴..

Java 프로그래밍 초급(5) - 컬렉션 프레임워크 : List
안녕하세요~ 항상 나아가는 개발자 pink_salt 핑솔입니다! 코드프레소 Java 웹 개발 체험단 활동을 하고 있습니다. Java의 정말 중요한 개념인 컬렉션 프레임워크 : List 에 대해서 알아봅시다~ 고고! 이번엔 'Java 프로그래밍 초급' 강의를 듣고 공부한 내용을 정리하여 다섯 번째 포스팅을 진행하겠습니다. List 자료구조 컬렉션 클래스에 대한 이해 앞 게시물에서 언급했던 주식 데이터 기억나시나요? List 자료 구조 데이터는 저장되는 데이터에 순서가 존재합니다. 중복되는 데이터가 저장될 수 있습니다. List 자료 구조를 위해 정의된 인터페이스 여러 건의 데이터의 하나의 객체로 관리합니다. 입력된 데이터에 순서가 존재합니다. 순서 정보의 관리를 위해 인덱스 개념 존재합니다. Collect..

Java 프로그래밍 초급(4) - 컬렉션 프레임워크 : 개념, 제네릭
안녕하세요~ 항상 나아가는 개발자 pink_salt 핑솔입니다! 코드프레소 Java 웹 개발 체험단 활동을 하고 있습니다. Java의 정말 중요한 개념인 컬렉션 프레임워크 : List 에 대해서 알아봅시다~ 고고! 이번엔 'Java 프로그래밍 초급' 강의를 듣고 공부한 내용을 정리하여 네 번째 포스팅을 진행하겠습니다. 컬렉션 프레임워크(collection framework)란? 여러 건의 데이터를 다루기 위해서 Array와 같은 데이터를 다루기 위한 자료구조의 구현체가 필요하다. 다양한 특성을 가진 데이터를 다루기 위해서는 그에 적합한 자료구조가 필요하다. 다양한 자료구조의 구현을 위한 클래스와 인터페이스의 집합이다. 필요성 다양한 자료구조의 구현체를 클래스 라이브러리 형태로 제공합니다. 1. 만약 매 ..

Java 프로그래밍 초급(3) - 객체지향 고급(오버라이딩, 다형성, 패키지)
안녕하세요~ 항상 나아가는 개발자 pink_salt 핑솔입니다! 코드프레소 Java 웹 개발 체험단 활동을 하고 있습니다. Java의 정말 중요한 개념인 객체지향 고급에 대해서 알아봅시다~ 고고! 이번엔 'Java 프로그래밍 초급' 강의를 듣고 공부한 내용을 정리하여 세 번째 포스팅을 진행하겠습니다. 메소드 오버라이딩(Method Overriding) 부모 클래스로부터 상속받은 메소드를 자식 클래스가 자신만의 특성에 맞게 새롭게 구현하는 것입니다. main 클래스에서 각 클래스의 객체를 생성하고 같은 이름의 다른 내용의 메소드를 실행하면 다른 내용의 코드가 객체에 따라 실행되는 것을 볼 수 있습니다. 메소드 오버라이딩의 조건 오버라이딩하는 부모 클래스의 메소드와 이름이 같아야 합니다. 오버라이딩하는 부모..

Java 프로그래밍 초급(2) - 객체지향 고급(상속)
안녕하세요~ 항상 나아가는 개발자 pink_salt 핑솔입니다! 코드프레소 Java 웹 개발 체험단 활동을 하고 있습니다. Java의 정말 중요한 개념인 객체지향 고급에 대해서 알아봅시다~ 고고! 이번엔 'Java 프로그래밍 초급' 강의를 듣고 공부한 내용을 정리하여 두 번째 포스팅을 진행하겠습니다. 상속의 개념(inheritance) 일반화된 특성이 정의된 User 클래스가 있다고 가정합니다. 또, 일반화된 특성을 모두 가지면서, 특수한 특성까지 정의한 클래스인 PaidUser가 있다고 가정합니다. 이렇듯 일반화된 클래스의 멤버들을 가지면서 자기 자신만의 멤버를 갖게 되는 것을 '상속'이라고 합니다. User가 추상적이고 PaidUser가 더 구체적입니다. 상속을 하는 클래스는 부모(Parent) 클래..

Java 프로그래밍 초급(2) - 객체지향 메소드
안녕하세요~ 항상 나아가는 개발자 pink_salt 핑솔입니다! 코드프레소 Java 웹 개발 체험단 활동을 하고 있습니다. Java의 정말 중요한 개념인 객체지향 그리고 메소드 대해서 알아봅시다~ 고고! 이번엔 'Java 프로그래밍 초급' 강의를 듣고 공부한 내용을 정리하여 두 번째 포스팅을 진행하겠습니다. 메소드의 개념과 기초 활용 메소드(Method) 객체는 속성과 행위를 갖고 있고, 메소드는 객체의 행위를 정의합니다. 메소드는 함수(function)과 거의 유사합니다. input과 output이 존재하며 특정 작업을 수행합니다. 차이점은 메소드는 특정 객체에 포함되어 있습니다. 독립적으로 존재하지 않습니다. 함수(function) 특정한 작업을 수행하기 위한 코드들의 집합입니다. 특정 작업의 코드들..

Java 프로그래밍 초급(1) - 객체지향 기초
안녕하세요~ 항상 나아가는 개발자 pink_salt 핑솔입니다! 코드프레소 Java 웹 개발 체험단 활동을 하고 있습니다. Java에 대해서 좀 더 자세히 공부해보겠습니다. Java의 정말 중요한 개념인 객체지향에 대해서 알아봅시다~ 고고! 이번엔 'Java 프로그래밍 초급' 강의를 듣고 공부한 내용을 정리하여 첫 번째 포스팅을 진행하겠습니다. SW 개발 방법론 SW는 매우 복잡하고 거대해지고 있습니다. 요구사항대로 동작하는 SW를 정해진 기간/예산 안에 만드는 것이 어렵습니다. 큰 규모의 SW를 잘만들고 관리하기 위해 SW 개발 방법론이 나오게 되었습니다. 요구사항 수집 요구사항 분석 고수준 설계 상세 설계 구현 테스트 의 흐름으로 진행됩니다. 알려진 방법론으로는 구조적 방법론 정보공학 방법론 객체지향..