반응형

전체 글 543

[Java] 백준 1026번 : 보물

문제 옛날 옛적에 수학이 항상 큰 골칫거리였던 나라가 있었다. 이 나라의 국왕 김지민은 다음과 같은 문제를 내고 큰 상금을 걸었다. 길이가 N인 정수 배열 A와 B가 있다. 다음과 같이 함수 S를 정의하자. S = A[0] × B[0] + ... + A[N-1] × B[N-1] S의 값을 가장 작게 만들기 위해 A의 수를 재배열하자. 단, B에 있는 수는 재배열하면 안 된다. S의 최솟값을 출력하는 프로그램을 작성하시오. 입력 첫째 줄에 N이 주어진다. 둘째 줄에는 A에 있는 N개의 수가 순서대로 주어지고, 셋째 줄에는 B에 있는 수가 순서대로 주어진다. N은 50보다 작거나 같은 자연수이고, A와 B의 각 원소는 100보다 작거나 같은 음이 아닌 정수이다. 출력 첫째 줄에 S의 최솟값을 출력한다. 예제..

[Java] 백준 1080번 : 행렬

문제 0과 1로만 이루어진 행렬 A와 행렬 B가 있다. 이때, 행렬 A를 행렬 B로 바꾸는데 필요한 연산의 횟수의 최솟값을 구하는 프로그램을 작성하시오. 행렬을 변환하는 연산은 어떤 3×3크기의 부분 행렬에 있는 모든 원소를 뒤집는 것이다. (0 → 1, 1 → 0) 입력 첫째 줄에 행렬의 크기 N M이 주어진다. N과 M은 50보다 작거나 같은 자연수이다. 둘째 줄부터 N개의 줄에는 행렬 A가 주어지고, 그 다음줄부터 N개의 줄에는 행렬 B가 주어진다. 출력 첫째 줄에 문제의 정답을 출력한다. 만약 A를 B로 바꿀 수 없다면 -1을 출력한다. 예제 입력 1 3 4 0000 0010 0000 1001 1011 1001 예제 출력 1 2 예제 입력 2 3 3 111 111 111 000 000 000 예제..

[Java] 백준 1449번 : 수리공 항승

문제 항승이는 품질이 심각하게 나쁜 수도 파이프 회사의 수리공이다. 항승이는 세준 지하철 공사에서 물이 샌다는 소식을 듣고 수리를 하러 갔다. 파이프에서 물이 새는 곳은 신기하게도 가장 왼쪽에서 정수만큼 떨어진 거리만 물이 샌다. 항승이는 길이가 L인 테이프를 무한개 가지고 있다. 항승이는 테이프를 이용해서 물을 막으려고 한다. 항승이는 항상 물을 막을 때, 적어도 그 위치의 좌우 0.5만큼 간격을 줘야 물이 다시는 안 샌다고 생각한다. 물이 새는 곳의 위치와, 항승이가 가지고 있는 테이프의 길이 L이 주어졌을 때, 항승이가 필요한 테이프의 최소 개수를 구하는 프로그램을 작성하시오. 테이프를 자를 수 없고, 테이프를 겹쳐서 붙이는 것도 가능하다. 입력 첫째 줄에 물이 새는 곳의 개수 N과 테이프의 길이 ..

[Java] 백준 1260번 : DFS와 BFS

문제 그래프를 DFS로 탐색한 결과와 BFS로 탐색한 결과를 출력하는 프로그램을 작성하시오. 단, 방문할 수 있는 정점이 여러 개인 경우에는 정점 번호가 작은 것을 먼저 방문하고, 더 이상 방문할 수 있는 점이 없는 경우 종료한다. 정점 번호는 1번부터 N번까지이다. 입력 첫째 줄에 정점의 개수 N(1 ≤ N ≤ 1,000), 간선의 개수 M(1 ≤ M ≤ 10,000), 탐색을 시작할 정점의 번호 V가 주어진다. 다음 M개의 줄에는 간선이 연결하는 두 정점의 번호가 주어진다. 어떤 두 정점 사이에 여러 개의 간선이 있을 수 있다. 입력으로 주어지는 간선은 양방향이다. 출력 첫째 줄에 DFS를 수행한 결과를, 그 다음 줄에는 BFS를 수행한 결과를 출력한다. V부터 방문된 점을 순서대로 출력하면 된다. ..

[Java] 객체 정렬 Comparable vs Comparator

Comparable Interface 정의 정렬 수행 시에 기본적으로 적용되는 정렬 기준이 되는 메서드를 정의하는 인터페이스로, Java에서 제공되는 정렬이 가능한 모든 클래스들은 Comparable Interface를 구현하고 있습니다. 정렬 시에 이 기준에 맞게 정렬이 수행됩니다. 1) Integer, Double 클래스 : 오름차순 정렬 2) String 클래스 : 사전순 정렬 java.lang.Comparable 구현 방법 정렬할 객체에 Comparable Interface를 implements 후, compareTo() 메서드를 오버라이드하여 구현합니다. compareTo() 메서드 작성법 현재 객체 < 파라미터로 넘어온 객체 : 음수 리턴 현재 객체 == 파라미터로 넘어온 객체 : 0 리턴 현..

Java 2022.02.20

[Java] 데이터 직렬화(Serialization)와 역직렬화(Deserialization)

데이터 직렬화(Serialization) 정의 메모리를 디스크에 저장하거나 네트워크 통신에 사용하기 위한 형식으로 변환하는 것을 '데이터 직렬화'라고 합니다. 사용 이유 데이터의 메모리 구조는 크게 2가지로 나뉩니다. 1) 값 형식(Value Type) 데이터 : int, float, char 등의 값 형식 데이터들은 스택에 메모리가 쌓이고 직접 접근이 가능합니다. 2) 참조 형식(Reference Type) 데이터 : 포인터 변수나 객체 타입의 변수들이 여기에 해당됩니다. 해당 형식의 변수를 선언하면 힙에 메모리가 할당되고, 스택에서는 이 힙 메모리를 참조하는 구조로 되어있습니다. 디스크에 저장하거나 통신을 할 때에는 위 두가지 중 값 형식(Value Type) 데이터만 가능합니다. 참조 형식(Refe..

Java 2022.02.20

[Java] 싱글턴(Singleton) 디자인 패턴

싱글턴(Singleton) 디자인 패턴 객체의 생성 제어 객체를 계속 생성/삭제하는데 많은 비용이 들어서 재사용이 유리한 경우, 혹은 여러 개의 객체가 필요없는 경우에는 객체의 생성을 제한하는 것이 좋습니다. 여러 개의 객체가 필요없는 경우는 수정 가능한 멤버 변수가 없고 기능만 있어서 객체를 구별할 필요가 없는 경우, 그리고 객체가 가진 고유한 특징 없이 동작만 중요한 경우(stateless)가 존재합니다. 싱글턴(Singleton) 생성 방법 1) 생성자의 접근 제한자를 private으로 설정하여 외부에서 생성자에 접근할 수 없도록 합니다. 2) 내부에서는 private에 접근 가능하므로 직접 객체를 생성하는데, 멤버 변수이므로 접근 제한자는 private으로 설정합니다. 3) 외부에서 private..

Java 2022.02.20

[Java] 생성자와 초기화

생성자와 초기화 생성자의 개념 생성자(constructor)는 클래스로부터 객체를 생성할 때 멤버 필드의 값을 초기화하는 등 기본적인 처리를 수행합니다. 생성자의 정의 생성자를 정의하는 방법은 메소드를 정의하는 방법과 유사하지만 몇 가지 다른점이 존재합니다. 첫째, 생성자의 이름은 반드시 클래스의 이름과 같아야 합니다. 둘째, 생성자는 메소드가 아니므로 리턴 타입이 없어야 하며, void로 선언될 수도 없습니다. class A { public A() {...}// 생성자 public void A(int i) {}// 생성자가 아님 } 셋째, 클래스를 상속하면 메소드는 자동으로 상속되지만 생성자는 상속이 되지 않습니다. 생성자를 지정하지 않으면 매개변수를 갖지 않은 생성자가 자동으로 생성되는데, 이를 디폴..

Java 2022.02.18

[Java] 백준 2210번 : 숫자판 점프

문제 5×5 크기의 숫자판이 있다. 각각의 칸에는 숫자(digit, 0부터 9까지)가 적혀 있다. 이 숫자판의 임의의 위치에서 시작해서, 인접해 있는 네 방향으로 다섯 번 이동하면서, 각 칸에 적혀있는 숫자를 차례로 붙이면 6자리의 수가 된다. 이동을 할 때에는 한 번 거쳤던 칸을 다시 거쳐도 되며, 0으로 시작하는 000123과 같은 수로 만들 수 있다. 숫자판이 주어졌을 때, 만들 수 있는 서로 다른 여섯 자리의 수들의 개수를 구하는 프로그램을 작성하시오. 입력 다섯 개의 줄에 다섯 개의 정수로 숫자판이 주어진다. 출력 첫째 줄에 만들 수 있는 수들의 개수를 출력한다. 예제 입력 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 2 1 1 1 1 1 1 예제 출력 1 15 힌트 11..

has-thumbnail="1" style="background-image:url('https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FurlgY%2FbtrtqgHgUIU%2F1TMiyUAkjT31Gb4oJL1sd0%2Fimg.png')"

[Java] 백준 1074번 : Z

문제 한수는 크기가 2N × 2N인 2차원 배열을 Z모양으로 탐색하려고 한다. 예를 들어, 2×2배열을 왼쪽 위칸, 오른쪽 위칸, 왼쪽 아래칸, 오른쪽 아래칸 순서대로 방문하면 Z모양이다. N > 1인 경우, 배열을 크기가 2N-1 × 2N-1로 4등분 한 후에 재귀적으로 순서대로 방문한다. 다음 예는 22 × 22 크기의 배열을 방문한 순서이다. N이 주어졌을 때, r행 c열을 몇 번째로 방문하는지 출력하는 프로그램을 작성하시오. 다음은 N=3일 때의 예이다. 입력 첫째 줄에 정수 N, r, c가 주어진다. 출력 r행 c열을 몇 번째로 방문했는지 출력한다. 제한 1 ≤ N ≤ 15 0 ≤ r, c < 2N 예제 입력 1 2 3 1 예제 출력 1 11 예제 입력 2 3 7 7 예제 출력 2 63 예제 입..

반응형