Java 22

[Java/자바] 싱글톤 패턴? 싱글톤 컨테이너? 그게 뭔데!!

오늘은 싱글톤에 대해서 알아보겠습니다. 우선 싱글톤은 흔히 싱글톤 패턴이라고 알려진 디자인 패턴에서 나왔습니다. 싱글톤 패턴이란, 자바에서 어떤 클래스에 대한 인스턴스를 하나만 유지하도록 도와주는 디자인 패턴을 의미합니다. (디자인 패턴은 자세히 설명할 수는 없지만, 어떠한 용도나 문제점을 해결하는데 좋은 구조...?? 정도로 저는 이해했습니다) 1. 싱글톤 패턴 그럼 우리는 왜 싱글톤 패턴을 사용할까요??? 우리는 프로젝트를 통해서 많은 클라이언트의 요청을 받고 처리합니다. 그러면 이러한 상황을 가정해봅시다. 만약 1,000,000명의 클라이언트가 1초에 한번씩 요청을 하는 상황을 가정합니다. 이 클라이언트는 주문을 요청하며 주문을 요청할 때마다 주문 객체를 생성하여 관리합니다. 그렇다면 우리는 10초..

Java 2023.07.30

[Java/자바] 문자열을 "+"로 split 해보자(BOJ 1541 잃어버린 괄호)

백준 1541 문제를 풀던 도중, 제가 생각해낸 해법에 대해서 문자열을 +로 split해야하는 상황이 발생했습니다. 여느 때와 같이 string뒤에 참조로 split 함수를 호출하여 구분자를 +로 지정하지 아래와 같은 에러가 나타났습니다. 여기서 쓰이는 +는 뒤에 어떤 것이 더 오기를 기대하기 때문에, +라는 quantifier가 기다리는 행동을 한다는 것을 알려주고 있습니다. 사실 +는 정규식을 사용할 때 종종 찾아볼 수 있습니다. 정규식으로 사용될 때 +는 뒤에 어떤 문자가 적어도 1번 이상 진행되는 것을 의미하는 것입니다. 따라서 우리가 사용하려는 + 문자 자체를 split하기 위해서는 위와 같이 진행할 수 없습니다. 따라서 + 대신 \\+로 수정하여 적용해주면 올바르게 나타낼 수 있습니다. 실제로..

Java 2023.07.26

[백준/BOJ] 11729번 하노이 탑 이동 순서 (자바/Java)

https://www.acmicpc.net/problem/11729 11729번: 하노이 탑 이동 순서 세 개의 장대가 있고 첫 번째 장대에는 반경이 서로 다른 n개의 원판이 쌓여 있다. 각 원판은 반경이 큰 순서대로 쌓여있다. 이제 수도승들이 다음 규칙에 따라 첫 번째 장대에서 세 번째 장대로 www.acmicpc.net 1. 문제 세 개의 장대가 있고 첫 번째 장대에는 반경이 서로 다른 n개의 원판이 쌓여 있다. 각 원판은 반경이 큰 순서대로 쌓여있다. 이제 수도승들이 다음 규칙에 따라 첫 번째 장대에서 세 번째 장대로 옮기려 한다. 한 번에 한 개의 원판만을 다른 탑으로 옮길 수 있다. 쌓아 놓은 원판은 항상 위의 것이 아래의 것보다 작아야 한다. 이 작업을 수행하는데 필요한 이동 순서를 출력하는 ..

BOJ/Recursion 2023.07.22

[백준/BOJ] 2992번 크면서 작은 수 (자바/Java)

https://www.acmicpc.net/problem/2992 2992번: 크면서 작은 수 정수 X가 주어졌을 때, X와 구성이 같으면서 X보다 큰 수 중 가장 작은 수를 출력한다. 수의 구성이 같다는 말은, 수를 이루고 있는 각 자리수가 같다는 뜻이다. 예를 들어, 123과 321은 수의 구성이 www.acmicpc.net 1. 문제 정수 X가 주어졌을 때, X와 구성이 같으면서 X보다 큰 수 중 가장 작은 수를 출력한다. 수의 구성이 같다는 말은, 수를 이루고 있는 각 자리수가 같다는 뜻이다. 예를 들어, 123과 321은 수의 구성이 같다. 하지만, 123과 432는 구성이 같지 않다 입력 첫째 줄에 X가 주어진다. (1 ≤ X ≤ 999999) X는 0으로 시작하지 않는다. 출력 첫째 줄에 결..

BOJ/BackTracking 2023.07.18

백트래킹이란? - 백트래킹으로 조합 구현하기 [Java/자바]

백트래킹이란? 백트래킹이란 해를 찾는 도중에 주어진 조건에 부합하지 않는 상태일 때, 즉시 이전 상태로 되돌아가 다른 경우의 수를 탐색하는 방법을 말합니다. 보통 이 알고리즘은 DFS나 BFS에서 사용됩니다. 모든 노드를 방문하는 알고리즘 중 하나인 DFS와 BFS에서 조건을 만족하지 않는 노드를 방문했을 때, 해당 노드로부터 연결된 모든 자식 노드들을 방문하지 않고 건너뛰는 방식입니다. 이를 가지치기(Pruning)이라고도 합니다. 저는 이 백트래킹을 조합의 경우의 수를 구하는 과정에서 처음 접했습니다. 따라서 m과 n이 주어졌을 때, 가능한 모든 경우의 수를 출력하는 코드를 소개하면서 백트래킹에 대해 코드와 함께 다뤄보겠습니다. 아래의 코드는 1부터 m까지의 정수가 있다고 했을 때, mCn의 모든 경..

CS/Algorithm 2023.07.18

[백준/BOJ] 1926번 도화지 (자바/Java)

https://www.acmicpc.net/problem/1926 1926번: 그림 어떤 큰 도화지에 그림이 그려져 있을 때, 그 그림의 개수와, 그 그림 중 넓이가 가장 넓은 것의 넓이를 출력하여라. 단, 그림이라는 것은 1로 연결된 것을 한 그림이라고 정의하자. 가로나 세로 www.acmicpc.net 1. 문제 어떤 큰 도화지에 그림이 그려져 있을 때, 그 그림의 개수와, 그 그림 중 넓이가 가장 넓은 것의 넓이를 출력하여라. 단, 그림이라는 것은 1로 연결된 것을 한 그림이라고 정의하자. 가로나 세로로 연결된 것은 연결이 된 것이고 대각선으로 연결이 된 것은 떨어진 그림이다. 그림의 넓이란 그림에 포함된 1의 개수이다. 입력 첫째 줄에 도화지의 세로 크기 n(1 ≤ n ≤ 500)과 가로 크기 m..

BOJ/BFS DFS 2023.07.14

[백준/BOJ] 18352번 특정 거리의 도시 찾기 (자바/Java)

https://www.acmicpc.net/problem/18352 18352번: 특정 거리의 도시 찾기 첫째 줄에 도시의 개수 N, 도로의 개수 M, 거리 정보 K, 출발 도시의 번호 X가 주어진다. (2 ≤ N ≤ 300,000, 1 ≤ M ≤ 1,000,000, 1 ≤ K ≤ 300,000, 1 ≤ X ≤ N) 둘째 줄부터 M개의 줄에 걸쳐서 두 개 www.acmicpc.net 1. 문제 어떤 나라에는 1번부터 N번까지의 도시와 M개의 단방향 도로가 존재한다. 모든 도로의 거리는 1이다. 이 때 특정한 도시 X로부터 출발하여 도달할 수 있는 모든 도시 중에서, 최단 거리가 정확히 K인 모든 도시들의 번호를 출력하는 프로그램을 작성하시오. 또한 출발 도시 X에서 출발 도시 X로 가는 최단 거리는 항상..

BOJ/BFS DFS 2023.07.14

[백준/BOJ] 18352번 특정 거리의 도시 찾기 (자바/Java)

https://www.acmicpc.net/problem/18352 18352번: 특정 거리의 도시 찾기 첫째 줄에 도시의 개수 N, 도로의 개수 M, 거리 정보 K, 출발 도시의 번호 X가 주어진다. (2 ≤ N ≤ 300,000, 1 ≤ M ≤ 1,000,000, 1 ≤ K ≤ 300,000, 1 ≤ X ≤ N) 둘째 줄부터 M개의 줄에 걸쳐서 두 개 www.acmicpc.net 1. 문제 어떤 나라에는 1번부터 N번까지의 도시와 M개의 단방향 도로가 존재한다. 모든 도로의 거리는 1이다. 이 때 특정한 도시 X로부터 출발하여 도달할 수 있는 모든 도시 중에서, 최단 거리가 정확히 K인 모든 도시들의 번호를 출력하는 프로그램을 작성하시오. 또한 출발 도시 X에서 출발 도시 X로 가는 최단 거리는 항상..

BOJ/BFS DFS 2023.07.12

모각코 2차(230710)

https://www.acmicpc.net/problem/1874 1874번: 스택 수열 1부터 n까지에 수에 대해 차례로 [push, push, push, push, pop, pop, push, push, pop, push, push, pop, pop, pop, pop, pop] 연산을 수행하면 수열 [4, 3, 6, 8, 7, 5, 2, 1]을 얻을 수 있다. www.acmicpc.net 1. 문제 스택 (stack)은 기본적인 자료구조 중 하나로, 컴퓨터 프로그램을 작성할 때 자주 이용되는 개념이다. 스택은 자료를 넣는 (push) 입구와 자료를 뽑는 (pop) 입구가 같아 제일 나중에 들어간 자료가 제일 먼저 나오는 (LIFO, Last in First out) 특성을 가지고 있다. 1부터 n까지..

모각코 2023.07.11

[자바/Java] 추상 클래스(Abstract Class)

추상 클래스란? : 공통적인 기능을 부모 클래스에로 정의해서 상속받되 일부 공통 기능은 자식 클래스에서 구현하도록 강제하는 것. 추상 클래스의 특징 - 구체적이지 않고 일반화된 클래스 - 객체들 간의 공통적인 기능을 정의한 클래스 - 기능의 구체적인 내용 구현은 자식 클래스에게 일임 - 추상 클래스는 단독으로 인스턴스를 만들 수 없음 - 상속을 통해 자식클래스에서 인스턴스를 생성 추상 클래스 선언하기 - 클래스 선언 부에 abstract 키워드 사용 - 추상 클래스의 멤버 : 필드, 생성자, 메소드 아래는 추상 클래스의 대표적인 예이다. public abstract class Student { private final String name; Student(String name){ this.name = n..

Java 2023.07.10