[백준/Java] 15663 - [Silver II] N과 M (9)
·
코딩테스트/백준
문제 링크문제 설명N개의 자연수와 자연수 M이 주어졌을 때, 아래 조건을 만족하는 길이가 M인 수열을 모두 구하는 프로그램을 작성하시오.N개의 자연수 중에서 M개를 고른 수열입력첫째 줄에 N과 M이 주어진다. (1 ≤ M ≤ N ≤ 8)둘째 줄에 N개의 수가 주어진다. 입력으로 주어지는 수는 10,000보다 작거나 같은 자연수이다.출력한 줄에 하나씩 문제의 조건을 만족하는 수열을 출력한다. 중복되는 수열을 여러 번 출력하면 안되며, 각 수열은 공백으로 구분해서 출력해야 한다.수열은 사전 순으로 증가하는 순서로 출력해야 한다.   처음에는 단순히 TreeSet으로 정렬된 수열을 출력하는 방법으로 접근했다 하지만 선언했던 TreeSet 구조는 String 타입의 제네릭을 갖고 있기에 자연 정렬될 때 다음과 ..
record
·
Java
record란2020년 초에 Java 14 버전에서 프리뷰 기능으로 제공되어Java 16 버전에서 정식 스펙으로 채택된 새로운 클래스 타입이다 데이터 중심의 클래스를 정의하기 위한 간결한 방법으로 주요 특징은 다음과 같다 간결한 데이터 클래스 정의자동으로 메서드 생성 (toString(), equals(), hashCode(), getter)불변성 보장생성자 및 검증 로직 추가 가능추가 메서드 정의 가능record는 DTO, 불변 데이터 모델, 값 객체 등을 만들 때 유용하게 사용할 수 있다 예제 코드를 살펴보자 // 소괄호 안에 필드 변수를 정의하며 자동으로 private final로 선언public record Student( String name, int age, String maj..
직렬화(Serialization)
·
Java
각자 PC OS마다 서로 다른 가상 메모리 주소 공간을 갖기 때문에 참조형 데이터들은 인스턴스를 직접 전달할 수 없다참조형 데이터를 외부로 전달하기 위해서는 직렬화 과정을 거쳐야한다 직렬화란? 자바 직렬화(Serialization)는 객체 인스턴스의 데이터를 I/O 스트림에 적합한 일련의 데이터로 변환하는 과정이다구체적으로, 자바 시스템 내부에서 사용되는 객체 또는 데이터를 외부의 자바 시스템에서도 사용할 수 있도록 바이트(byte) 형태로 데이터를 변환하는 기술이다 이 과정을 통해 객체를 파일로 저장하거나, 네트워크를 통해 전송하거나, 다른 컴퓨터 환경에서 객체를 재구성할 수 있다직렬화된 데이터는 나중에 역직렬화(Deserialization) 과정을 통해 다시 객체로 변환할 수 있다 자바에서 직렬화를 ..
고유 락 (Intrinsic Lock)
·
Java
자바의 모든 객체는 락(lock)을 갖고 있다모든 객체가 갖고 있으므로 고유 락(intrinsic lock)이라고 하며, 모니터처럼 동작한다고 하여 모니터 락(monitor lock), 혹은 그냥 모니터(monitor)라고 한다 예제를 통해 고유 락을 다루는 synchronized를 확인해보자 고유 락 예제import java.time.LocalDateTime;import java.util.concurrent.TimeUnit;public class IntrinsicLock { public static void main(String[] args) { IntrinsicLock intrinsicLock = new IntrinsicLock(); Thread thread1 = new..
Java에서의 Thread
·
Java
쓰레드는 하나의 프로세스 내에서 독립적으로 실행되는 작업 단위로프로그램 실행의 가장 작은 단위로 볼 수 있으며 이는 동시성 프로그래밍의 핵심 요소이다 일반적인 자바 애플리케이션은 하나의 메인 쓰레드로 시작하지만, 여러 작업을 동시에 처리하기 위해서는 추가적인 쓰레드가 필요하다 스레드 1. Thread 클래스 상속public class MyThread extends Thread{ @Override public void run(){ // 작업 내용 }}Thread 클래스를 상속받고 run 메서드를 재정의하여 구현한다 구현 예제public class MyThread extends Thread{ @Override public void run(){ for (in..
[level 2] 땅따먹기 - 12913
·
코딩테스트/프로그래머스
[level 2] 땅따먹기 - 12913문제 링크성능 요약메모리: 86.7 MB, 시간: 29.01 ms구분코딩테스트 연습 > 연습문제채점결과정확성: 59.8효율성: 40.2합계: 100.0 / 100.0제출 일자2024년 11월 24일 17:41:25문제 설명땅따먹기 게임을 하려고 합니다. 땅따먹기 게임의 땅(land)은 총 N행 4열로 이루어져 있고, 모든 칸에는 점수가 쓰여 있습니다. 1행부터 땅을 밟으며 한 행씩 내려올 때, 각 행의 4칸 중 한 칸만 밟으면서 내려와야 합니다. 단, 땅따먹기 게임에는 한 행씩 내려올 때, 같은 열을 연속해서 밟을 수 없는 특수 규칙이 있습니다.예를 들면,| 1 | 2 | 3 | 5 || 5 | 6 | 7 | 8 || 4 | 3 | 2 | 1 |로 땅이 주어졌다면,..
[Gold V] 숨바꼭질 3 - 13549
·
코딩테스트/백준
[Gold V] 숨바꼭질 3 - 13549문제 링크성능 요약메모리: 23192 KB, 시간: 148 ms분류0-1 너비 우선 탐색, 너비 우선 탐색, 데이크스트라, 그래프 이론, 그래프 탐색, 최단 경로제출 일자2024년 11월 21일 15:49:43문제 설명수빈이는 동생과 숨바꼭질을 하고 있다. 수빈이는 현재 점 N(0 ≤ N ≤ 100,000)에 있고, 동생은 점 K(0 ≤ K ≤ 100,000)에 있다. 수빈이는 걷거나 순간이동을 할 수 있다. 만약, 수빈이의 위치가 X일 때 걷는다면 1초 후에 X-1 또는 X+1로 이동하게 된다. 순간이동을 하는 경우에는 0초 후에 2*X의 위치로 이동하게 된다.수빈이와 동생의 위치가 주어졌을 때, 수빈이가 동생을 찾을 수 있는 가장 빠른 시간이 몇 초 후인지 구..
[Gold III] 최소비용 구하기 2 - 11779
·
코딩테스트/백준
[Gold III] 최소비용 구하기 2 - 11779문제 링크성능 요약메모리: 65404 KB, 시간: 620 ms분류데이크스트라, 그래프 이론, 최단 경로제출 일자2024년 11월 22일 14:45:22문제 설명n(1≤n≤1,000)개의 도시가 있다. 그리고 한 도시에서 출발하여 다른 도시에 도착하는 m(1≤m≤100,000)개의 버스가 있다. 우리는 A번째 도시에서 B번째 도시까지 가는데 드는 버스 비용을 최소화 시키려고 한다. 그러면 A번째 도시에서 B번째 도시 까지 가는데 드는 최소비용과 경로를 출력하여라. 항상 시작점에서 도착점으로의 경로가 존재한다.입력첫째 줄에 도시의 개수 n(1≤n≤1,000)이 주어지고 둘째 줄에는 버스의 개수 m(1≤m≤100,000)이 주어진다. 그리고 셋째 줄부터 m..
[Gold III] 파티 - 1238
·
코딩테스트/백준
[Gold III] 파티 - 1238문제 링크성능 요약메모리: 91940 KB, 시간: 756 ms분류데이크스트라, 그래프 이론, 최단 경로제출 일자2024년 11월 22일 14:01:03문제 설명N개의 숫자로 구분된 각각의 마을에 한 명의 학생이 살고 있다.어느 날 이 N명의 학생이 X (1 ≤ X ≤ N)번 마을에 모여서 파티를 벌이기로 했다. 이 마을 사이에는 총 M개의 단방향 도로들이 있고 i번째 길을 지나는데 Ti(1 ≤ Ti ≤ 100)의 시간을 소비한다.각각의 학생들은 파티에 참석하기 위해 걸어가서 다시 그들의 마을로 돌아와야 한다. 하지만 이 학생들은 워낙 게을러서 최단 시간에 오고 가기를 원한다.이 도로들은 단방향이기 때문에 아마 그들이 오고 가는 길이 다를지도 모른다. N명의 학생들 중..
[Gold IV] 특정한 최단 경로 - 1504
·
코딩테스트/백준
[Gold IV] 특정한 최단 경로 - 1504문제 링크성능 요약메모리: 69800 KB, 시간: 564 ms분류데이크스트라, 그래프 이론, 최단 경로제출 일자2024년 11월 21일 18:11:32문제 설명방향성이 없는 그래프가 주어진다. 세준이는 1번 정점에서 N번 정점으로 최단 거리로 이동하려고 한다. 또한 세준이는 두 가지 조건을 만족하면서 이동하는 특정한 최단 경로를 구하고 싶은데, 그것은 바로 임의로 주어진 두 정점은 반드시 통과해야 한다는 것이다.세준이는 한번 이동했던 정점은 물론, 한번 이동했던 간선도 다시 이동할 수 있다. 하지만 반드시 최단 경로로 이동해야 한다는 사실에 주의하라. 1번 정점에서 N번 정점으로 이동할 때, 주어진 두 정점을 반드시 거치면서 최단 경로로 이동하는 프로그램을..