전체 글 80

백준 2579 계단 오르기 [JAVA]

https://www.acmicpc.net/problem/2579문제 계단 오르기 게임은 계단 아래 시작점부터 계단 꼭대기에 위치한 도착점까지 가는 게임이다. 과 같이 각각의 계단에는 일정한 점수가 쓰여 있는데 계단을 밟으면 그 계단에 쓰여 있는 점수를 얻게 된다.예를 들어 와 같이 시작점에서부터 첫 번째, 두 번째, 네 번째, 여섯 번째 계단을 밟아 도착점에 도달하면 총 점수는 10 + 20 + 25 + 20 = 75점이 된다.계단 오르는 데는 다음과 같은 규칙이 있다.계단은 한 번에 한 계단씩 또는 두 계단씩 오를 수 있다. 즉, 한 계단을 밟으면서 이어서 다음 계단이나, 다음 다음 계단으로 오를 수 있다.연속된 세 개의 계단을 모두 밟아서는 안 된다. 단, 시작점은 계단에 포함되지 않는다.마지막 도..

알고리즘 2024.09.30

[2장 객체 생성과 파괴] 아이템2. 생성자에 매개변수가 많다면 빌더를 고려하라

생성자에 매개변수가 많다면 빌더를 고려하라정적 팩터리와 생성자에 선택적 매개변수가 많을 때 적절히 대응하기 어렵다는 제약이 있다. 대안1. 점층적 생성자 패턴 식품포장의 영양정보를 표현하는 클래스를 예를 들어보자. public class NutritionFacts{ // 필드(기본값이 있다면) 기본값으로 초기화된다. private final int servingSize; // (mL, 1회 제공량) - 필수 private final int servings; // (회, 총 n회 제공량) - 필수 private final int calories; // (1회 제공량당) - 선택 private final int fat; // (g/1회 제공량) - 선택 private fina..

백준 10814 나이순 정렬 [JAVA]

https://www.acmicpc.net/problem/10814  문제온라인 저지에 가입한 사람들의 나이와 이름이 가입한 순서대로 주어진다. 이때, 회원들을 나이가 증가하는 순으로, 나이가 같으면 먼저 가입한 사람이 앞에 오는 순서로 정렬하는 프로그램을 작성하시오.입력첫째 줄에 온라인 저지 회원의 수 N이 주어진다. (1 ≤ N ≤ 100,000)둘째 줄부터 N개의 줄에는 각 회원의 나이와 이름이 공백으로 구분되어 주어진다. 나이는 1보다 크거나 같으며, 200보다 작거나 같은 정수이고, 이름은 알파벳 대소문자로 이루어져 있고, 길이가 100보다 작거나 같은 문자열이다. 입력은 가입한 순서로 주어진다.출력첫째 줄부터 총 N개의 줄에 걸쳐 온라인 저지 회원을 나이 순, 나이가 같으면 가입한 순으로 한 ..

카테고리 없음 2024.09.27

백준 3190 뱀 [JAVA]

https://www.acmicpc.net/problem/3190문제'Dummy' 라는 도스게임이 있다. 이 게임에는 뱀이 나와서 기어다니는데, 사과를 먹으면 뱀 길이가 늘어난다. 뱀이 이리저리 기어다니다가 벽 또는 자기자신의 몸과 부딪히면 게임이 끝난다.게임은 NxN 정사각 보드위에서 진행되고, 몇몇 칸에는 사과가 놓여져 있다. 보드의 상하좌우 끝에 벽이 있다. 게임이 시작할때 뱀은 맨위 맨좌측에 위치하고 뱀의 길이는 1 이다. 뱀은 처음에 오른쪽을 향한다. 뱀은 매 초마다 이동을 하는데 다음과 같은 규칙을 따른다.먼저 뱀은 몸길이를 늘려 머리를 다음칸에 위치시킨다.만약 벽이나 자기자신의 몸과 부딪히면 게임이 끝난다.만약 이동한 칸에 사과가 있다면, 그 칸에 있던 사과가 없어지고 꼬리는 움직이지 않는다..

알고리즘 2024.09.26

백준 1427 소트인사이드 [JAVA]

https://www.acmicpc.net/problem/1427 간단하지만 중요한 기본문제 해당 문제는 int 배열을 만들어 오름차순 정렬을 하면된다.물론 int 배열을 내림차순정렬하여 거꾸로 출력하는 방법도 있지만  오름차순 정렬를 하는 법을 활용해보겠다. 방법 1. 오름차순 직접 구현import java.io.BufferedReader;import java.io.InputStreamReader;import java.util.Arrays;class Main{ // 소트인사이드 백준 - 1427 public static void main(String[] args) throws Exception { BufferedReader br = new BufferedReader(new ..

알고리즘 2024.09.26

백준 12865 평범한 배낭 [JAVA]

0-1 KnapSack Problem대표적인 DP 문제 알고리즘 중 하나로 알려져 있다. DP 란, 큰 문제를 작은 문제로 나누어서 푸는 방법을 일컫는 말이다.최적 부분 구조를 가진다는 것은 전체 문제의 최적해가 부분 문제의 최적해들로써 구성된다는 것입니다.처음에는 Brute Force 로 접근하였지만 시간 복잡도가 2 ^n 으로  시간 초과가 날것이 분명했다.DP 문제를 풀기 위해서는 '최적의 원리' (Principle of Optimality) 가 성립하는지를 확인해야 하는데,최적의 원리는 다음과 같다. "어떤 문제의 입력사례의 최적해가 그 입력사례를 분할한 부분사례에 대한 최적해를 항상 포함하고 있으면.그 문제는 대하여 최적의 원리가 성립한다" 평범한 배낭 문제도 적용해 보자집합 A 를 n 개의 물..

알고리즘 2024.09.26

[Real Mysql 8.0] 5. 트랜잭션

5.1트랜잭션 트랜잭션은 작업의 완전성을 보장해줍니다. 즉 논리적인 작업셋을 모두 완벽하게 처리하거나, 모두 처리하지 못할 경우에는 원 상태로 복구하여 작업의 일부만 적용되는 현상(Partial update)이 발생하지 않게 만들어주는 기능입니다.트랜잭션은 커밋되거나 롤벡됩니다. 5.1.1 MySql 에서의 트랜잭션트랜잭션은 하나의 논리적인 작업 셋에 하나의 쿼리가 있든 두개이상의 쿼리가 있든 관계없이 논리적입 작업 셋 자체가 100% 적용되거나(commit을 실행했을때) 아무것도 적용되지않아야 (ROLLBACK) 함을 보장해주는 것입니다. InnoDB 스토리지엔진 (트랜잭션 지원) vs MyISAM (트랜잭션 미지원) 트랜잭션 관점에서 InnoDB 테이블과 MyISAM 테이블이 차이를 살펴보자 ..

[백준] 11729 : 하노이 탑 이동 순서

https://www.acmicpc.net/problem/11729 알고리즘원반이 한개면 그냥 옮기면 끝이다.(종료조건)원반이 n 개 일때1번 기둥에 있는 n개 원반 중 n-1 개를 목적지가 아닌 보조기둥(2번)으로 옮긴다.1번 기둥에 남아 있는 가장 큰 원반을 목적지(3번) 기둥으로 옮긴다.2번 기둥에 있는 n-1 개 원반을 다시 목적지(3번) 기둥으로 옮긴다.원반이 1 개일 때가 '종료 조건' 에 해당한다. 원반 n 개 문제를 풀려면 n-1 개 원반 문제를 풀어야 하는데 이는 바로 '좀 더 작은 값으로 자기 자신을 호출하는 과정'이다. 따라서 이 문제는 전형적인 재귀 호출 알고리즘에 해당한다(이승찬, 2017) import java.io.BufferedReader;import java.io.Input..

알고리즘 2024.09.24

[2장 객체 생성과 파괴] 아이템1. 생성자 대신 정적 펙터리 메서드를 고려하라.

정적 팩터리 메소드 : 생성자와 별도로 그 클래스의 인스턴스를 반환하는 단순한 정적메서드. public static void main(String[] args) { Boolean bool1 = new Boolean(true); // new 생성자로 인스턴스 생성 // public Boolean(boolean value) { // this.value = value; // } Boolean bool2 = Boolean.valueOf(true); // 정적 팩터리 메소드를 활용한 인스턴스 생성 // public static Boolean valueOf(boolean b) { // ret..

[자바] 정규표현식 정리 (ReplcaceAll)

정규표현식 문법과 예제^,$ - 문자열의 시작과 끝^regex : 문자열의 시작이 regex 에 해당하는 경우regex$ : 문자열의 끝이 regex에 해당하는 경우String result1, result2;String str = ".123!";result1 = str.replaceAll("^.", "*");System.out.println(result1);result2 = str.replaceAll("!$", "*");System.out.println(result2);// 출력*123!.123* [ ] - 문자의 집합 범위"." 는 일반적으로 모든 문자를 의미하지만 대괄호 '[]' 안에 있을 경우는 문자 그대로의 '.' 을 의미합니다/[abc] : a, b, c 중 문자 1개[abc][xyz] : a,..

알고리즘 2024.08.18