전체 글

소프트웨어학부 재학중/개발을 기록합니다.
#2110 공유기 설치문제 이해처음에는 문제 이해가 가지 않았다.... 흠냐문제를 이해하자면 우선, '거리'에 집중하면 된다. 1. 집 n 개가 있다.2. 집의 좌표가 주어진다.3. 공유기의 개수가 주어진다.4. c개의 공유기를 n개의 집에 설치한다.5. 이때 최대 거리를 출력한다.    해결방법 고안'이진탐색'으로 접근하자 나는 이진탐색 문제라고 해서 항상 하던 것처럼 인덱스를 잘라서 접근하려고 했다..근데 이번에는 거리에 이진탐색으로 반씩 줄여서 접근하면 된다.최소부터 최대까지, 공유기를 설치할 수 있는 수에서 거리의 최댓값을 구하면 되는 것이다 나는 무슨 단어에 집착하는 경향이 있는데 이번에도 '인접한'이라는 단어에 넘어가서 좀 헤맸다. ㅜ_ㅜ이진탐색으로 구한 거리를 사용해서 집에 설치, 그 집 좌..
문제 이해 문제보러가기   문제 이해부터 해보자.핵심은 아래와 같다.   이렇게 갈 수 있는 거리의 최대값을 구해야 한다.!!!! 문제 이해를 하면 DFS + 백트레킹이 떠오를 것이다.Why?1.  모든 가능한 경로를 탐색하면서 가장 긴 경로를 찾는 유형의 문제 -> dfs2. 각 경로에서의 최대 길이를 저장하고, 경로의 조건에 맞지 않는 경우 -> 백트래킹  해결방법 고안 K만 없으면 그냥 dfs 하면 되는데 k 때문에 고려해야 하는 상황이 있다;; 그래서 K를 아직 안쓴 경우와, K를 써버린 경우로 나누었다.    k가 없을 때 로직// k가 없을 때if (!flag) { // 자신보다 작으면 이동 if (h > map[nx][ny]) { visited[nx][ny] = tru..
Disjoint-set- 서로소 또는 상호배타 집합들은 서로 중복 포함된 원소가 없는 집합들이다.- 집합에 속한 하나의 특정 멤버를 통해 각 집합들을 구분한다.- 서로소 집합을 표현하는 방법 : 연결리스트, 트리- 서로소 집합 연산 : Make-Set(x), Find-Set(x), Union(x, y) 연결 리스트- 같은 집합의 원소들은 하나의 연결리스트로 관리한다.- 연결리스트의 맨 앞의 원소를 집합의 대표 원소로 삼는다.- 각 원소는 집합의 대표원소를 가리키는 링크를 갖는다. 트리- 같은 집합의 원소들을 하나의 트리로 표현한다.- 자식 노드가 부모 노드를 가리키며 루트 노드가 대표자가 된다.  트리의 배열을 이용하면 아래와 같다.  자바로 나타내보기public class DisjoinSetTest {..
그래프란그래프는 아이템들과 이들 사이의 연결 관계를 표현한다.- vertex: 연결점, edge: 연결된 간선 의 수 그래프는 정점들의 집합과 이들을 연결하는 간선들의 집합으로 구성된 자료 구조- V개의 정점을 가지는 무향 그래프는 최대 V*(V-1)/2 간선이 가능 ex) 5개 정점이 있는 무향 그래프의 최대 간선 수는 10 (5*4/2)개이다. 선형 자료구조나 트리 자료구조로 표현하기 어려운 N:N관계를 가지는 원소들을 표현하기에 용이하다. 그래프 유형무향 그래프, 유향 그래프, 가중치 그래프, 사이클 없는 방향 그래프(DAG) 완전 그래프- 정점들에 대해 가능한 모든 간선들을 가진 그래프 부분 그래프- 원래 그래프에서 일부의 정점이나 간선을 제외한 그래프 트리도 그래프이다- 각 노드는 최대 하나의 ..
#3109 빵집문제보러가기 문제이해1열에서부터 마지막 열까지 도착해야한다.한번 방문한 곳은 다시 방문할 수 없다오른쪽, 오른쪽 위 대각선, 오른쪽 아래 대각선을 방문할 수 있다.해결 방법 고안1. dfs라고 생각했다. 그 이유는 경로를 찾는거여서 한길을 찾으면 마지막 열에 도착할 수 있는 길을 계속해서 찾아야 했다.2. 방문 처리가 필요하다. 한번 선택하면 다시 선택할 수 없어서 visited를 true로 놓으면 된다.3. 백트래킹은 필요없다. 마지막 열에 도착하면 바로 return 한다. 코드더보기import java.io.BufferedReader;import java.io.IOException;import java.io.InputStreamReader;import java.util.StringTok..
아아앗악아아악 발표에 걸렸다. 자세히 정리해보도록 하자,, 문제 이해1. 사용자 A와 B가 있다. 두 사용자는 동시에 움직인다.2. 매초마다 이동 한다. 만약 이동한 좌표의 위치가 BC에 들어오면 접속이 가능하다.3. 이렇게 BC에 들어올 때마다 충전량을 합한 최대값을 찾아야한다.첫 번째 시도사용자가 두 명밖에 없어서 사용자가 m만큼 움직일 때마다 저장되는 충전량을 더하려고 했다.그래서 이차원 배열 map을 만들어서 BC의 성능을 저장하려고 했다.맨해튼 거리를 이용해서 충전 범위에 들어오는 map의 좌표값에 P(성능)을 저장하는 것이다.c >= Math.abs(x-i) + Math.abs(y-j)    두 번째 시도근데 생각을 해보니 BC가 겹칠 수가 있었다. 그래서 이차원 배열을 이용하는 게 아니라는 ..
#17826 공주님을 구해라문제로가기문제이해용사에서 공주까지 갈 때 최단 거리를 구해야한다.용사은 상하좌우 이동할 수 있다.벽은 이동할 수 없다. 빈칸만 이동할 수 있다.1칸당 이동하는데 1시간이 소요된다. T 시간이 넘어가면 fail을 출력해야 한다.* 조건 * 그람 위치에서 그람을 만나면 벽도 이동이 가능한다.   해결 방법 고안1. 최단거리 임으로 bfs를 이용한다.2. 검의 위치에 도달하면 que를 사용하지 않고 바로 그 거리에서 공주까지의 직선 거리를 구한다. 약간의 삽질처음에 검이 위치까지 가기전에 거리를 구했고, 검의 위치에서 다시 que를 사용해서 최단거리를 구하려고 했다.그럴 필요 없이 그냥 검의 위치에서 직선방향으로 (x , y)에서 공주의 위치 ( n-1, m-1)를 구하면 됐었다. ..
· CodingTest
#18428 감시피하기문제로가기문제이해장애물, 선생님, 학생이 있고 장애물이 학생이 있는 row나 column에 있게 되면 선생님은 학생을 발견하지 못한다.선생님이 상하좌우에서 학생을 발견한다면 no를, 발견하지 못한다면 yes를 출력단 장애물은 3개까지 설치할 수 있다.해결방법 고안장애물을 설치하는 건 - dfs선생님이 상하좌우에서 학생이 있는지 탐지하는 건 - bfs로 생각했다. 지금 생각해보면 bfs는 필요없는 듯 하긴 하다.dfs로 장애물 3개를 추가한 map을 만든다 -> 그 map에서 바로 check 함수로 bfs를 호출한다.check 함수에는 일단 선생님의 위치를 que에 넣어두고 그 위치에서 열과 행을 다 검사해서 학생을 발견하면 false를 하고, 장애물을 발견하면 반복문을 break하고..
한덩이
Run to Develop