
문제링크 문제 풀이 과정 결혼식에 초대 가능한 친구는 친구와 그 친구의 친구까지 초대가 가능하다. 이것은 탐색 할 때 깊이가 2까지만 탐색한다는 것을 의미 할 수 있다. 예제 1번 기준으로 그래프로 나타내면 아래와 같다. 1의 기준으로 친구는 2, 3 이 해당 된다. 친구의 친구는 4가 해당 된다. public static void Find(int depth, int start){ if(depth == 2){ return; } for (int i = 0; i < list[start].size(); i++) { int next = list[start].get(i); visited[next] = true; Find(depth + 1, next); } } 재귀호출 탈출 조건을 깊이가 2일때로 해주었다. 근처 ..

문제링크 문제 풀이 과정 벌의 위치와 꿀통의 위치를 3가지 케이스로 나눠서 풀이를 해야한다. [1] 벌이 왼쪽에 고정 되어 있으며, 꿀통은 오른쪽에 고정 되어 있을때 [2] 벌이 오른쪽에 고정 되어 있으며, 꿀통은 왼쪽에 고정 되어 있을때 [3] 벌이 양쪽에 고정 되어 있으며, 꿀통이 움직일때 각각의 케이스를 진행 할때마다 벌1과 벌2의 꿀의 합을 반복문을 이용하여 새롭게 구했는데 이렇게 하면 서브테스크 4번에서 시간 초과가 생긴다. 아래 코드가 바로 시간 초과가 난 코드이다. 이것을 해결하기 위해서 합을 매번 새롭게 구하지 않고 벌또는 꿀통이 움직일때마다 이전 값에서 더하거나 빼는 방식으로 구했더니 모든 태스크가 통과가 되었다. 전체 코드

문제 링크 문제 풀이 과정 체스 규칙을 잘 모르면 이 문제를 처음 접했을 때 난감할 수 있다. 사실 체스 규칙을 전혀 몰라서 퀸의 움직임에 대해서 먼저 검색했었다. 퀸은 오른쪽, 왼쪽, 위, 아래, 대각선으로 움직일 수 있다. 첫번째 퀸의 위치가 (0, 1) 일때 엑스 친 부분은 퀸이 공격 가능한 위치이다. 이 문제는 서로 다른 퀸이 공격 못하게 배치해야 되므로 다음 퀸의 자리는 (1, 3) 이 된다. 3번째 줄에는 퀸을 둘 수 있는 곳이 한곳밖에 없다. 4번째 퀸까지 배치가 가능하므로 서로다른 퀸이 공격 못하게 하는 위치가 된다. 대부분 구글에서는 1차원 배열로 풀이 하였지만, 1차원 배열보다는 직관적인 2차원배열이 이해가 잘되서 2차원 배열로 풀이 하였다. 퀸이 공격이 가능한 자리를 표시하는 visi..

문제링크 문제 풀이 과정 보석을 가방에 넣는 로직에서 보석이 중복으로 들어가지 않는 것에 대해 오래 고민을 한 문제이다. 우선 보석의 무게와 비용을 한번에 담기 위해서 Item 클래스를 만들었다. static class Item implements Comparable{ int idx; int weight; int cost; public Item(int idx, int weight, int cost) { this.idx = idx; this.weight = weight; this.cost = cost; } @Override public int compareTo(Item o) { if(this.weight == o.weight){ return o.cost - this.cost; } return this.we..

문제링크 문제 풀이 과정 문자열 일부분에 PPAP 가 있을 때 이 문자열을 P 로 치환을 하여 마지막에 문자열 P 하나만 남아 있다면 이 문자열은 PPAP 문자열이다. 처음에는 이 문제를 문자열을 배열로 변환한 뒤 스택을 이용하여 풀었더니 시간초과가 되었다. 문자열을 배열로 변환하지 않고 문자열의 인덱스를 이용하여 문제를 풀었더니 해결되었다. 문자열에서 P 가 나오면 P 의 갯수를 카운트를 해준다. 이것을 A 가 나올때까지 카운트 해준다. A 가 나왔을 때 P 의 갯수가 2개 이상이며, 다음 문자열이 P 일때만 PPAP 문자열이 되므로, P 의 수를 한개 줄여주고 문자열의 인덱스를 증가시킨다. 여기서 P 의 갯수를 한개 줄이는 PPAP 는 다시 P 로 치환되기때문에 다시 P 가 추가 된다. 결국 -2 +..

문제 링크 문제 풀이 과정 이 문제는 탐색을 통해서 해결해한다. 다이나믹 프로그래밍으로 해결 하기위해서는 우선 dp 용 배열을 하나 만들어 둔다. 탐색 할때 첫번째 행과 열일 때는 별도의 탐색을 하지 않는다 첫번째 열과 행이 아니면서 1일때는 현재 기준으로 위, 왼쪽, 왼쪽 대각선의 값을 확인 해봐야한다. 그 중에서 최소값에다가 + 1을 한 값이 사각형의 크기가 된다. (1, 1) 인 경우에는 현재값이 1이라 위, 왼쪽, 왼쪽 대각선의 값을 비교해야한다. 이 세개의 최소 값은 0 이고 이 값에 + 1한 값은 1이 된다. (2, 2) 일때는 위, 왼쪽, 왼쪽 대각선의 값의 최솟값이 1이며, 이 값에 + 1 하면 2가 된다. 여기서 나온 2는 이 사각형의 크기가 된다. 전체 코드

문제링크 문제 풀이 과정 이 문제의 알고리즘 분류는 투 포인터라서 투 포인터로 쉽게 해결 할 수 있었다. 현재 몸무게를 p1, 기억하는 몸무게를 p2 로 지정 한 뒤 문제를 풀었다. p1 * p1 - p2 * p2 를 한 결과 값이 n 보다 작으면 p1 을 증가하였고, n 보다 클 때는 p2 를 증가하였다. 결과 값이 n 과 같을 때는 list 에 값을 저장을 해두었다. 더이상 값이 없을 때는 p1 * p1 - p2 * p2 결과 값이 n 보다 크면서 p1 - p2 값이 1 이 반복 된다. 이때는 반복문을 종료하면 된다. 전체 코드

문제링크 문제 풀이 방법 처음에 이 문제를 접했을 때는 이진 탐색으로 해결하려고 했다가 코드가 더 복잡해지고 시간 초과 될 것 같아서 다른 방법을 찾아야했다. 규칙을 찾으면 생각보다 쉽게 해결 되는 문제이다. 문제에 있는 예제로 설명을 하면, 우선 주어진 추들을 정렬을 해야한다. 1번추로 측정 할 수 있는 무게는 1이다. 2번째 추까지 이용하여 측정 가능한 무게는 2이다. 2번째까지 측정 가능한 무게는 2이며, + 1을 하면 3이다. 3은 3번째 추(2)보다 크므로 3은 측정이 가능하며, 3번째까지 측정 가능한 무게는 4가 된다. 4번째 추를 이용하여 측정 가능한 무게는 7이다. 5번째 추를 이용하여 측정 가능한 무게는 13이다. 6번째 추를 이용하여 측정 가능한 무게는 20이다. 여기서 20 + 1을 ..

문제링크 문제 풀이 과정 크루스칼 풀이 방법을 그대로 적용하면 되는 문제이다. 크루스칼을 적용하기 전에 한단계 준비 작업이 필요하다. 주어진 데이터는 별들의 좌표만 주어지기 때문에 서로 다른 별들의 거리를 먼저 구한 다음 크루스칼을 적용하면 된다. 두점 사이의 거리 구하는 방법이다. public static double dist (Point p1, Point p2){ return Math.sqrt(Math.pow(p1.x - p2.x, 2) + Math.pow(p1.y - p2.y, 2)); } 별들의 좌표는 Point class 를 별도로 구현하였다. public static class Point{ double x; double y; int idx; public Point(double x, double..
- Total
- Today
- Yesterday
- 자바
- 자바공부
- 백준
- 취준
- 코딩테스트
- 코딩테스트 준비
- 프로그래머스 카카오
- 백엔드 개발자 취업 준비
- 제로베이스 백엔드 스쿨
- 개발자 취준
- 알고리즘 공부
- 취업 준비
- 코테공부
- 알고리즘공부
- 개발자 면접 준비
- 코딩테스트 공부
- 주니어 개발자 취업 준비
- 백엔드 개발자
- 알고리즘
- 코테 준비
- java
- 기술 면접 준비
- 프로그래머스
- 프로그래머스 자바
- 취업준비
- 제로베이스 백준 장학금
- 코딩테스트공부
- 코테준비
- 개발자 취업 준비
- 백엔드 개발자 기술 면접 준비
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |