자바11 자바 객체 복사 방법(얕은 복사, 깊은 복사) 자바 객체 복사 방법 자바에서는 객체를 복사하는 경우 참조 값으로만 복사가 됩니다. 하지만 상황에 따라 값 자체를 복사해야 하는 경우가 있습니다. 이렇게 자바의 복사 방법은 얕은 복사와 깊은 복사 두 가지 방법이 있습니다. 얕은 복사 얕은 복사(Shallow copy)는 객체를 복사할 때 원본 객체와 복사본 객체가 같은 객체를 참조하는 경우를 말합니다. 즉, 복사본 객체를 수정하는 경우 원본 객체도 변경 사항을 공유하게 됩니다. public class CopyObjectEx { private static class Point{ int x,y; public Point(int x, int y) { this.x = x; this.y = y; } public void setX(int x) { this.x = x.. JAVA/이펙티브 자바 2023. 7. 2. [백준 Java] 3055 탈출 🔗 문제링크 🔗 3055번: 탈출 사악한 암흑의 군주 이민혁은 드디어 마법 구슬을 손에 넣었고, 그 능력을 실험해보기 위해 근처의 티떱숲에 홍수를 일으키려고 한다. 이 숲에는 고슴도치가 한 마리 살고 있다. 고슴도치는 제 www.acmicpc.net 🌟 생각 흐름 - 개인적 풀이 방법 🌟 물이 이동하는 경로와, 고슴도치가 이동하는 경로를 생각한다. 한 턴을 기준으로 BFS를 이용하여 먼저 물을 이동시키고, 고슴도치가 이동하는 방식으로 알고리즘을 구현하였다. 쉽게 물을 이동시키기 위해 물의 좌표를 입력당시 큐에 넣어두고 고슴도치의 시작 위치 또한 큐에 넣어준다. 이후에 물을 이동시키면서 기존 BFS와 같이 큐에 추가하면서 이동시킨다. ㄴ 차이점은 visit배열을 따로 선언하는것이 아닌 map에서 물이 이동.. 알고리즘/백준 2023. 5. 12. JVM의 동작 방식과 메모리 구조 1. JVM의 동작 순서 1. 자바를 실행 시키면 자바 컴파일러에 의해 자바(. java) 파일이 클래스 파일(. class)로 컴파일된다. 2. 이후에 클래스 로더에 .class 파일(바이트 코드)을 로드한다. - 이 과정에서 클래스 파일은 메모리에 저장되고 파일 정보가 JVM내부에 유지된다. 3. class loder를 통해 JVM Runtime Data Area(메모리 영역)을 구성한다. (메소드 영역, 힙영역, 스택영역) -> 아래에 나오지만 간단하게 설명하면 - 1. 메소드 영역 : 클래스 수준의 정보(클래스 이름, 부모 클래스 이름, 메소드, 변수) - 2. 힙 영역 :객체, 배열이 생성되는 영역 (new 생성자로 생성되는) - 3. 스택 영역 : 각 스레드 마나 하나씩 존재, 메소드 호출 시.. JAVA 2023. 4. 26. [Java 백준] 2887 행성터널 플래티넘5 🔗 문제링크 🔗 2887번: 행성 터널 첫째 줄에 행성의 개수 N이 주어진다. (1 ≤ N ≤ 100,000) 다음 N개 줄에는 각 행성의 x, y, z좌표가 주어진다. 좌표는 -109보다 크거나 같고, 109보다 작거나 같은 정수이다. 한 위치에 행성이 두 개 이 www.acmicpc.net 🌟 생각 흐름 🌟 오랜만에 그래프 문제 푸니까 재미있었다. 1. 모든 행성의 경우에 대해서 계산하기 -> 100,000 * 99,999 /2 하니까 메모리 에러가 났다. 2. 고민을 하다가 메모리 초과가 난경우에 대해서 생각을 해봤다. 문제를 다시 읽다 보니 터널생성에는 x, y, z 중 제일 작은 차를 이용한다. 즉 x, y, z의 제일 작은 값들만 비교하면 다른 값들은 의미가 없다는 생각이 들었다. 따라서 x,.. 알고리즘 2023. 4. 20. [백준, JAVA] 17281 공 ⚾️ (골드 4, 구현) 🔗 문제링크 🔗 https://www.acmicpc.net/problem/17281 17281번: ⚾ ⚾는 9명으로 이루어진 두 팀이 공격과 수비를 번갈아 하는 게임이다. 하나의 이닝은 공격과 수비로 이루어져 있고, 총 N이닝 동안 게임을 진행해야 한다. 한 이닝에 3아웃이 발생하면 이닝이 종 www.acmicpc.net 🌟 생각 흐름 🌟 모든 가능한 선수들의 번호수를 깊이 우선탐색을 이용해서 구한다 ( 4번 타자는 1번으로 정해져 있다 ) 선수들이 정해지면 점수를 매긴다. 쓰리아웃이면 다음 이닝으로 넘어가고 그다음 플레이어(타자? 투수?)가 이어서 진행한다. 만약 0점이면 바로 아웃점수를 체크하고 넘어간다. 점수가 있는 경우 홈런인 경우는 1,2,3루수에 사람이 있는 경우 모두 점수로 체크한다. 1,2.. 알고리즘 2023. 4. 6. [백준] 2170 선 긋기 : 스위핑(Sweeping) 2170번: 선 긋기 첫째 줄에 선을 그은 횟수 N(1 ≤ N ≤ 1,000,000)이 주어진다. 다음 N개의 줄에는 선을 그을 때 선택한 두 점의 위치 x, y(-1,000,000,000 ≤ x < y ≤ 1,000,000,000)가 주어진다. www.acmicpc.net 왼쪽 부터 선형 순회 하면 한번의 탐색으로 값을 낸다. [JAVA 코드] import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.util.ArrayList; import java.util.List; import java.util.StringTokenizer; public class Main { priva.. 알고리즘 2022. 11. 25. [백준 Java] 2812 크게만들기 그리디 알고리즘 [링크] https://www.acmicpc.net/problem/2812 2812번: 크게 만들기 N자리 숫자가 주어졌을 때, 여기서 숫자 K개를 지워서 얻을 수 있는 가장 큰 수를 구하는 프로그램을 작성하시오. www.acmicpc.net [문제풀이 방법] 가장 큰 숫자를 만들기 위해서는 앞자리가 가장 큰 숫자가 나와야 한다. 따라서 앞자리의 제일 큰 숫자가 오도록 숫자를 찾으면 된다 하지만 문제는 N개중 K개를 지우는 경우이므로 앞에서부터 k까지만 탐색을 해야 뒤에 남은 자리의 숫자를 모두 채울 수 있다 예를 들어 123456의 6자리 숫자에서 4자리를 지우는 경우에는 (0~4범위 [1,2,3,4,5])범위 안에서 탐색하여 5를 선택하고 하나를 선택하였으므로 탐색 가능 범위가 (6~6범위 [6])까.. 알고리즘 2022. 11. 10. [백준 Java] 2638 치즈 [문제 링크] boj 2638 치즈 골드 3 자바 https://www.acmicpc.net/problem/2638 2638번: 치즈 첫째 줄에는 모눈종이의 크기를 나타내는 두 개의 정수 N, M (5 ≤ N, M ≤ 100)이 주어진다. 그 다음 N개의 줄에는 모눈종이 위의 격자에 치즈가 있는 부분은 1로 표시되고, 치즈가 없는 부분은 0으로 www.acmicpc.net [생각 흐름] init 함수에서 배열에서 바깥쪽을 모두 -1로 초기화하고 안쪽에 있는 것과 다르게 표기한다. 이때 만약 치즈가 있는 칸이 하나도 없다면 true를 리턴하여 더 이상 진행하지 않도록 해준다. 이후에 remove 함수에서 치즈가 있는 칸이라면 4면 중 2면이 -1로 노출되어 있는 치즈 인지 확인하고 노출되어있다면 본 배열의.. 알고리즘 2022. 10. 17. [백준 Java] 11053 가장 긴 증가하는 부분 수열 (DP) [문제 링크] boj 11053 가장 긴 증가하는 부분 수열 자바 풀이 https://www.acmicpc.net/problem/11053 11053번: 가장 긴 증가하는 부분 수열 수열 A가 주어졌을 때, 가장 긴 증가하는 부분 수열을 구하는 프로그램을 작성하시오. 예를 들어, 수열 A = {10, 20, 10, 30, 20, 50} 인 경우에 가장 긴 증가하는 부분 수열은 A = {10, 20, 10, 30, 20, 50} 이 www.acmicpc.net [생각 흐름] dp(다이나믹 프로그래밍)을 이용하여 문제를 해결했다. 앞에서부터 arr[i]를 포함한다는 전제로(일종의 기준점) arr[i]보다 작고(arr[i]보다 작아야 arr[i]가 커서 증가하는 부분 수열 이므로) sum[j]( 0~j까지의 .. 알고리즘 2022. 10. 2. [백준 JAVA]14502_연구소 [문제 링크] 14502 boj 연구소 자바 https://www.acmicpc.net/problem/14502 14502번: 연구소 인체에 치명적인 바이러스를 연구하던 연구소에서 바이러스가 유출되었다. 다행히 바이러스는 아직 퍼지지 않았고, 바이러스의 확산을 막기 위해서 연구소에 벽을 세우려고 한다. 연구소는 크 www.acmicpc.net [생각 흐름] 문제는 연구실에 바이러스가 최대한 안 퍼지게 할 수 있는 벽을 3개 세우는 문제이다. 처음에는 모든 경우에 3개 벽을 세우는 것을 계산하여 문제를 푸는 것인지 고민했다 (설마 완탐..? ) 예제를 보다가 내가 계산하는 것도 어렵게 느껴져서 그냥 완탐으로 풀이하였다. 일단 백 트랙킹을 이용하여 벽을 3개 어떻게 세울 건지 고려하고, 각각의 경우에 대해서.. 알고리즘 2022. 9. 29. [백준]12851_숨바꼭질 2 [문제 링크] boj 12851 숨바꼭질 2 https://www.acmicpc.net/problem/12851 12851번: 숨바꼭질 2 수빈이는 동생과 숨바꼭질을 하고 있다. 수빈이는 현재 점 N(0 ≤ N ≤ 100,000)에 있고, 동생은 점 K(0 ≤ K ≤ 100,000)에 있다. 수빈이는 걷거나 순간이동을 할 수 있다. 만약, 수빈이의 위치가 X일 때 www.acmicpc.net [생각 흐름] 이전에 숨바꼭질 문제 3번과 동일한 문제 유형이었다. 추가적인 문제 조건으로 몇 가지의 방법으로 최단시간에 도착할 수 있는지가 포인트였다. 먼저 동생보다 수빈이가 앞에 있다면 n-m을 리턴해준다, 만약 같은 자리에 있어도 바로 리턴해준다 여기서 가는 방법의 수는 한 가지이므로 한가지 이고, 이를 생각하.. 알고리즘 2022. 9. 28. 이전 1 다음