전개 1) 백준 17135 캐슬 디펜스를 풀던 도중 복사된 List원소를 변경했을 때, 원본 List의 원소가 동시에 변경이 되는 일이 발생. 2) 그로인해 깊은 복사와 얕은 복사의 차이에 대하여 더 자세하게 정리해야 할 필요성을 느낌. 3) 나아가 자바에서 깊은 복사를 하려면 어떤식으로 접근해야하는지 알아보기. 얕은 복사 (Shallow Copy) 1) 주소값을 복사한다. 참조하는 실제값이 같다. 복사본의 변경이 원본에 영향을 미친다. 깊은 복사 (Deep Copy) 1) 실제값을 새로운 메모리 공간에 복사한다 (원본이 참조하는 객체까지 복사한다.). 실제값이 다르다. 복사본의 변경이 원본에 영향을 미치지 않는다. 예시 코드 package com.baekJoon; import java.io.Buffer..
https://www.acmicpc.net/problem/17135 17135번: 캐슬 디펜스 첫째 줄에 격자판 행의 수 N, 열의 수 M, 궁수의 공격 거리 제한 D가 주어진다. 둘째 줄부터 N개의 줄에는 격자판의 상태가 주어진다. 0은 빈 칸, 1은 적이 있는 칸이다. www.acmicpc.net 풀이 0) 준비물 적들을 담을 클래스 Enemy c의 오름차순) 궁수를 담을 리스트 archers 적들을 담을 리스트 enemies 최대 kill수를 저장할 maxKill 궁수를 배치할 조합 함수 allocateArcher() 1) 조합을 돌려 나올수 있는 모든 궁수의 배치를 뽑는다. 2) 1에서 나온 모든 케이스를 계산한다. 주의사항 1) 같은 적을 여러명의 궁수가 쏠 수 있다. 따라서 가장 가까운 적을 ..
https://www.acmicpc.net/problem/12739 12739번: 돌림판 (Small) 지훈이는 경품 이벤트를 진행하기 위해서 원형판이 N등분 되어 있고, 각 N등분된 곳에 빨간색 또는 초록색 또는 파란색이 색칠되어 있는 돌림판을 준비하였다. 이 이벤트의 룰은 간단하다. 이벤 www.acmicpc.net 풀이 1) 돌림판의 색을 저장할 board[] 배열과 swap을 위한 temp[] 배열을 생성한다. 2) K번 반복하는 반복문 생성. (색을 바꾸는 횟수) 3) N번 반복하는 반복문 생성. (돌림판이 나누어진 수) 4) 주어진 규칙에 따라 해당 색을 어떤 색으로 바꿀지 판단한다. 4-1) 이전-현재-다음 의 색상이 모두 동일할 경우 현재 색을 파란색으로 바꾼다. 4-2) 아닐경우, 빨강 ..
https://www.acmicpc.net/problem/20055 20055번: 컨베이어 벨트 위의 로봇 길이가 N인 컨베이어 벨트가 있고, 길이가 2N인 벨트가 이 컨베이어 벨트를 위아래로 감싸며 돌고 있다. 벨트는 길이 1 간격으로 2N개의 칸으로 나뉘어져 있으며, 각 칸에는 아래 그림과 같이 1부 www.acmicpc.net 풀이 0) 컨베이어 벨트를 나타낼 이차원 배열 belt[][2]를 선언한다. belt[i][0]은 내구도, belt[i][1] 로봇의 유무를 나타낸다. 1) 한칸씩 이동 2) belt를 temp로 초기화 3) 로봇이 내리는 위치에 닿으면 빼야함 4) 로봇은 한칸 더 이동 5) 이동한 로봇이 내리는 위치이면 빼야함 6) 새로운 로봇을 올림 7) 내구도 검사 8) 1~7까지 반복..
https://www.acmicpc.net/problem/13335 13335번: 트럭 입력 데이터는 표준입력을 사용한다. 입력은 두 줄로 이루어진다. 입력의 첫 번째 줄에는 세 개의 정수 n (1 ≤ n ≤ 1,000) , w (1 ≤ w ≤ 100) and L (10 ≤ L ≤ 1,000)이 주어지는데, n은 다리를 건너는 트 www.acmicpc.net 풀이 1) 현재 다리 위에 건너고 있는 트럭의 무게를 저장할 큐 trucks, 입력 받은 트럭을 저장할 큐 bridge, 현재 다리위의 총 무게를 저장할 변수 sum을 생성한다. 2) bridge의 초기 상태는 다리 길이 w 만큼 0을 넣는다. 3) bridge가 텅텅 빌때까지 계속 하나씩 뽑을 것이다. while() 3-1) 먼저 bridge에서 ..
https://www.acmicpc.net/problem/1052 1052번: 물병 지민이는 N개의 물병을 가지고 있다. 각 물병에는 물을 무한대로 부을 수 있다. 처음에 모든 물병에는 물이 1리터씩 들어있다. 지민이는 이 물병을 또 다른 장소로 옮기려고 한다. 지민이는 한 번 www.acmicpc.net 풀이 이진수로 바꾸면 물병이 몇개 필요한지 쉽게 알 수 있다. 예제에서 N = 3, K = 1 일때, N = 3을 이진수로 표현하면 11(2) 이다. 여기서 1의 개수가 곧 물병의 개수이다. K = 1이므로 물병은 1개 여야만한다. 따라서 가장 쉬운 방법은 1을 더해서 100(2) 로 만드는 것이다. 즉 1개의 물병만 사면 한번에 K = 1개의 물병으로 옮길 수 있게 된다. 다른 예를 들어보자. 만약 ..
https://www.acmicpc.net/problem/9519 9519번: 졸려 첫째 줄에 X(1 ≤ X ≤ 1,000,000,000) 가 주어지고, 둘째 줄에 X번 깜박인 후의 단어가 주어진다. 단어는 알파벳 소문자로만 이루어져 있고, 길이는 구간 [3,1000]에 포함된다. www.acmicpc.net 풀이 1) 단어가 홀수일 경우와 짝수일 경우로 나누어 단어를 섞는다. 섞을때 마다 list에 저장한다. 2) 섞은 결과가 map에 이미 존재할 경우 루프를 돈다는 의미이다. 3) 루프를 발견하면 해당 map의 value 가 주기가 된다. 4) list.get(N을 주기로 나눈 나머지) 가 정답이 된다. 주의사항 1) String 을 더하는 방식으로 하면 오래 걸린다. StringBuilder를 사용..
- Total
- Today
- Yesterday
- 알고리즘
- Spring
- 코딩새내기
- 백준
- 문자열
- 다익스트라
- java
- S3
- DFS
- 백트래킹
- 시뮬레이션
- 그리디
- react
- react native
- 현꾸라지
- laugh4mile
- 리액트
- Spring Boot
- g4
- G5
- SWEA
- S2
- 객체지향
- BFS
- PriorityQueue
- 리액트 네이티브
- map
- 구현
- 우선순위큐
- 자바
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |