전체 글 296

[JAVA] 참조변수 (Call by Reference, Call by Value)

C언어에서는 포인터를 이용해서 매개변수의 주소값을 넘겨 "참조(Reference)"할 수 있다. JAVA에서는 포인터가 따로 없으며, 일단 기본적인 매개변수는 Call by Value라고 생각한다. 하지만, 예외적으로 배열(Array)과 클래스(Class)는 참조변수로 Call by Reference로 작동한다. 그렇다면, 전달받은 배열이나 클래스는 어떻게 Call by Value처럼 기존의 참조값을 건들지 않고 사용할까? 예시를 하나 들어보겠다. Call by Reference void dfs(boolean[] check){ check[0] = true; //dfs(....) } Call by Reference -> Call by Value 처럼 사용하는법 void dfs(boolean[] check)..

[JAVA] DFS/BFS "여행경로"

ArrayList에 하나씩 값을 넣어야한다는 편견을 깨주었다. 한가지의 순서를 각각의 list[i]에 value + " " + value2 를 하여 일련의 String을 이어붙이고 이를 sort하여 가장 낮은차순의 배열을 추출할때 사용한다. import java.util.ArrayList; import java.util.Collections; public class TravelRoute { boolean[] visited; //방문한지 안한지를 체크하는 visited배열 ArrayList answers; public String[] solution(String[][] tickets) { visited = new boolean[tickets.length]; answers = new ArrayList(); ..

[JAVA] DFS/BFS "단어변환"

단어는 charAt메소드를 이용해서 String에서 글자를 각각 비교할 수 있다. public class WordConversion { int answer; //최소 단계 boolean[] used; //단어를 사용 중인지를 판단하는 visited와 같은 역할을 하는 배열 public int solution(String begin, String target, String[] words) { answer = 51; //단어 최대값이 50이므로 used = new boolean[words.length]; dfs(begin, target, 0, words); return answer == 51 ? 0 : answer; //answer이 51이면 target과 같은 단어가 없는 것으로 판단. } public v..

[JAVA] DFS/BFS "네트워크"

아래의 내용은 DFS로 구현하였다. 이 문제는 DFS로 푸는 문제인것을 확인했고, boolean visited[] 배열을 이용하여 방문한 노드를 체크하는 방식인 것도 알았다. 고민은, 한 뭉텅이가 연결되고, 카운트++; 한 뭉텅이가 연결되고, 카운트++; 위처럼 코드를 작동하게 하려면 어떻게 재귀함수를 작성하느냐였다. 결론은, "main 메소드에서" 방문하지않은 노드들만 호출하는 동시에 카운트++;을 하면 된다. 그러면 메인 메소드에서, 한 뭉텅이당 하나의 노드만 호출되고, 나머지 노드들은 재귀로써 방문처리된다. class Solution { void dfs(int i, boolean[] check, int[][] computers){ check[i] = true; for(int j=0; j

[JAVA] DFS/BFS "타겟 넘버"

DFS/BFS 문제를 처음 접해서 다른 이들의 코드를 참고했다. 다음은 DFS 코드이다..예술이다.. class Solution { public int solution(int[] numbers, int target) { int answer = 0; answer = dfs(numbers, 0, 0, target); return answer; } int dfs(int[] numbers, int n, int sum, int target) { if(n == numbers.length) {//노드를 모두 탐색했을때만 타겟과 합이 같은지 검사한다 if(sum == target) { return 1; } return 0; } return dfs(numbers, n + 1, sum + numbers[n], target..

DFS/BFS 개념정리

1. DFS(Depth-First Search) : 깊이 우선탐색 =>전체적으로 재귀형식이다. 예제 코드 참고. 큐에 넣어서 구현하는 방식. 최상단 원소를 기준으로 해서 방문하지 않은 인접 노드가 있으면 방문(번호 낮은 인접노드부터) 그다음은 8. 돌아가서 3-4-5 탐색순서 : 1-2-7-6-8-3-4-5 순으로 깊게 들어가는것을 우선으로 한다. DFS 소스코드 예제 인접한노드를 for문으로 낮은 인덱스값부터 검사하여 인접하면 방문(dfs재귀) 2. BFS(Breadth-First Search) : 너비우선탐색 큐에 넣어서 구현 인접노드중에서 방문하지 않은 노드를 모두 큐에 넣어서(낮은 인덱스부터) 하나씩 뽑으면서 방문하며 방문하지않은 노드를 큐에 계속 넣는다. 그리고 3을꺼내서 4와 5를 큐에 넣는다..

운동

가슴: 벤치프레스, 펙덱플라이, 덤벨(아래가슴) 삼두: 오버헤드 트라이셉스 익스텐션, 킥백, 케이블푸쉬다운(그립 다양) 등: 데드리프트(전신겸), 풀업, 시티드로우 이두: 덤벨컬/해머컬, 인클라인 덤벨컬/해머컬 어깨: 시티드 덤벨프레스, 래터럴 레이즈, 프론트 레이즈 하체: 스쿼트, 레그익스텐션, 레그프레스 가슴: 벤치프레스, 딥스, 체스트프레스 삼두: 오버헤드 트라이셉스 익스텐션, 킥백, 삼두머신 등: 데드리프트(전신겸), 풀업, 시티드로우 이두: 덤벨컬, 해머컬, 이두머신 어깨: 시티드 덤벨프레스, 래터럴 레이즈, 프론트 레이즈 하체: 레그프레스, 레그 익스텐션, 스쿼트 3분할 운동 3분할 가슴/삼두(1일차) 등/이두(2일차) 어깨/하체(3일차) 2분할 운동 2분할 운동 가슴/삼두/어깨(4일차) 등/..

일상 포스팅 2020.11.03

2020-2022년 초보개발자에서 취준까지 계획..

2020년 : 마무리 11-12月 프로그래머스 코딩테스트 연습 풀이 및 정리 2021년 : 10월 전까지 지원서류 준비마칠것 1. 정보처리기사 => 빠르게 못끝낼거라면 시작 안하는게 나을듯 2. 토익 오픽 : 오픽노잼 유튜브. => 최대한 빠르게, 효율적으로. 3. Java8 스킬 4. Spring Boot www.inflearn.com/course/%EC%8A%A4%ED%94%84%EB%A7%81-%EC%9E%85%EB%AC%B8-%EC%8A%A4%ED%94%84%EB%A7%81%EB%B6%80%ED%8A%B8#curriculum [무료] 스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술 - 인프런 | 강의 스프링 입문자가 예제를 만들어가면서 스프링 웹 애플리케이션 개발 전반을 ..

일상 포스팅 2020.11.03

[JAVA] 동적프로그래밍(DP) "도둑질"

개미병사들이 집을 한칸 건너 터는 문제와 비슷하다. 유의할 점은, 집들이 아래와 같이 동그랗게 원으로 배치된다는 점이다. 기본적인 점화식은 아래와 같다. A[n] = Max( A[n-2] + A[n] , A[n-1]) 이 때, 첫번째 집이 선택되는경우와 아닌 경우로 나누어서 1. 첫번째 집이 선택되는 경우 : pick[0] 2. 첫번째 집이 선택되지 않는 경우 : pick[1] 두가지 케이스를 같이 for문에서 연산을 돌린다. class Solution { public int solution(int[] money) { int[][] pick = new int[2][money.length]; pick[0][0] = money[0]; pick[0][1] = money[0]; pick[1][0] = 0; pi..

[JAVA] 동적프로그래밍(DP) "등굣길"

배열의 초기화 기본타입(Primitive type)의 배열의 경우 초기값을 가지고 있다(int = 0 / String = "") ex) int[] , String 참조타입(Reference type)의 배열의 경우는 엘리먼트의 초기값이 null 임을 주의하자 ex) Integer[] 아래링크에서, DP를 사용할때 초기화 스킬을 사용한다는 것에서 아이디어를 얻었다. 2020/10/13 - [코딩테스트/개념정리] - DP(=다이나믹 프로그래밍,Dynamic Programming) 심화 DP(=다이나믹 프로그래밍,Dynamic Programming) 심화 동적계획법(Dynamic programming)은 자료구조에서 동적할당(Dynamic Allocation)과는 다르다. 알고리즘에서 사용되는 "다이나믹(Dy..