[Algorithm] 99클럽 코테 스터디 11일차 TIL | 백준_체스판 다시 칠하기(1018번)
·
Algorithm
https://www.acmicpc.net/problem/1018문제가 이해 안 됐었는데 그냥 모든 경우의 수가 필요한 문제였다.ㅡㅡ 가로가 13, 세로가 10 이라고 가정하면가로는 0~7, 1~8, 2~9, 3~10, 4~11, 5~12, 6~13세로는 0~7, 1~8, 2~9, 3~10만큼 이동하면서 계산해야한다.for(int i = 0; i  이후 checkBoard 메서드에서 색칠해야하는 개수를 세준다.public static int checkBoard(int x, int y){ String[] boardA = {"WBWBWBWB", "BWBWBWBW"}; int countA = 0; int countB = 0; for(int i = x; i  전체코드import java.u..
[Algorithm] 99클럽 코테 스터디 10일차 TIL | 백준_빙산(2573번)
·
Algorithm
https://www.acmicpc.net/problem/2573정답 안 보고 힌트 안 보고 오롯이 내 힘으로 푼 문제라 더 뿌듯!!☺️ 복잡해 보이지만 차근차근 풀어가면 생각보다 어렵지 않다. 우선 덩어리의 개수를 구하는 함수가 필요하다고 생각해서 dfs 활용하였다.map에서 덩어리(?) 개수 세는 문제는 몇 번 풀었어서 풀이가 금방 나왔다.public static void dfs(int x, int y){ int[] dx = {1, 0, -1, 0}; int[] dy = {0, 1, 0, -1}; visited[x][y] = true; for(int i = 0; i = 0 && dx_x = 0 && dy_y 0){ dfs(dx_x, dy_y); ..
[Algorithm] 99클럽 코테 스터디 9일차 TIL | 백준_이분 그래프(1707번)
·
Algorithm
https://www.acmicpc.net/problem/1707이분 그래프는 정점을 두 그룹으로 나눌 수 있어야 하는데, ArrayList [] 배열을 사용하여 인접 리스트를 생성하고ArrayList[] graph = new ArrayList[V];for(int j = 0; j ();}for(int j = 0; j  colors가 0이면 미방문 정점처음 방문하게 되는 정점을 1로 두고그 정점과 인접한 정점들은 -1로 설정한다. 만약 인접한 정점과 현재 정점이 같다면? 이분 그래프가 아니다!public static boolean bfs(int n, ArrayList[] graph, int[] colors){ Queue queue = new LinkedList(); queue.add(n); ..
[Algorithm] 99클럽 코테 스터디 8일차 TIL | 백준_단지번호붙이기(2667번)
·
Algorithm
https://www.acmicpc.net/problem/2667N x N 크기의 map을 선언하고0또는 1값을 배열에 넣어준다. 단지 내 집의 수를 count 변수로, 총 단지수를 total 변수로 선언하였다. 단지 내 집의 수를 오름차순으로 정렬하여 출력해야하므로 PriorityQueue를 사용하였다. map에서 방문 처리는 map[i][j]=0으로 값을 바꿔주고, map이 0보다 큰 값인 위치의 배열값만 검사하도록 한다! 처음에 3%에서 틀렸습니다가 나왔는데단지 내 처음 집을 찾았을 때 방문 처리를 하지 않았던 것이 원인이었다..!!for(int i = 0; i 0){ count = 1; map[i][j] = 0; //방문처리 total..
[Algorithm] 99클럽 코테 스터디 7일차 TIL | 백준_숨바꼭질(1697번)
·
Algorithm
https://www.acmicpc.net/problem/1697가벼운 문제라고 생각했는데 생각보다 오래걸렸다ㅠㅠ가장 빠른 시간을 찾는 문제이므로 dfs보다 bfs가 적합하다고 생각했다 Node를 queue에 넣어서 풀이했는데, Node 에는 현재 위치와 걸린 시간을 넣어준다.class Node{ int location; int time; public Node(int location, int time){ this.location = location; this.time = time; }} 현재 위치를 기준으로 움직인 값들을 다시 큐에 넣고location+1location-1location*2 int[] arr = new int[3];arr[0] = l+1;ar..
[Algorithm] 99클럽 코테 스터디 6일차 TIL | 백준_DFS와 BFS(1260번)
·
Algorithm
https://www.acmicpc.net/problem/1260dfs와 bfs의 개념만 알고 있다면 풀 수 있는 문제나는 2차원 배열에 입력값을 그대로 담아간선 리스트를 사용하여 그래프를 표현하였다. 문제에 정점이 여러 개인 경우 정점 번호가 작은 것을 먼저 방문한다고 되어있어2차원 배열을 정렬하여 문제를 풀었다.for(int i = 0; i { if(a[0] == b[0]){ return a[1] - b[1]; } return a[0] - b[0];});한 가지 간과하고 있던 문제는입력값이 5 3 11 53 55 2로 들어올 때다. 기존 풀이에서 위와 같이 정렬했을 때 결과는 1 5 2 3이 나와야 되는데 1 5 3 2 가 나왔다for(int i = 0; i map[i..
[Algorithm] 99클럽 코테 스터디 5일차 TIL | 백준_두 용액(2470번)
·
Algorithm
https://www.acmicpc.net/problem/2470이전과 비슷한 이분탐색 문제라고 생각하고 처음 문제를 봤을 때 low랑 high 초기화를 어떤 수로 해야 되지?mid는 뭐랑 비교해??? 하며 혼란이 있었다. 서치해보니 이 문제는 투 포인터를 사용하는 문제라고 한다.-_- 투 포인터란? 정렬된 배열에서 두 개의 포인터를 사용해서 특정 조건을 만족하는 값을 찾는 알고리즘 기법이다.즉. 배열의 첫번째 값을 left, 배열의 마지막 값을 right로 두고두 합이 찾으려는 값보다 작으면 left를 오른쪽으로 이동 시키고 (합을 키우기 위해)두 합이 찾으려는 값보다 크면 right를 왼쪽을 이동 시킨다. (합을 줄이기 위해) 일단 이 개념을 숙지해두고 풀어나가기 시작했다! 이 문제에서는 mid 대신..
[Algorithm] 99클럽 코테 스터디 4일차 TIL | 백준_기타 레슨(2343번)
·
Algorithm
https://www.acmicpc.net/problem/2343오늘도 이분탐색..^^문제의 접근 방법에 대해서만 살짝 gpt한테 엿듣고 low를 가장 긴 녹화 길이로,high를  모든 녹화 길이의 합으로 설정한 후 블루레이 크기를 mid로 잡는 것을 시작으로 차근차근 풀어나간 문제다.(답을 보지않고 맞혔다는 것에 큰 희열 🥲 나..이제 이분탐색 마스터?) 이 문제의 핵심은 mid 값으로 잘랐을 때 M개로 나눌 수 있는가? 이다. 만약 나눈 값이 M보다 크면mid 값을 더 크게 잡아야 하므로 low = mid + 1을 해주고 나눈 값이 M보다 작거나 같다면 mid값을 더 작게 잡아야 하므로 high = mid - 1을 해준다.이때 정답이 나올 수 있으므로 result값에 mid를 넣어주었다. (최솟값을..
[Algorithm] 99클럽 코테 스터디 3일차 TIL | 백준_선분 위의 점(11663번)
·
Algorithm
https://www.acmicpc.net/problem/11663분명 이진 탐색 알고리즘인건 알겠는데..그래서 어떻게 풀지 고민이 됐던 문제다. 우선 점의 좌표 배열을 오름차순으로 정렬하고배열에서 선분의 시작점 이상인 첫번째 위치를 찾고배열에서 선분의 끝점 이하인 첫번째 위치를 찾는다.  그리고 이 위치를 찾기 위해 이분탐색을 활용한다.import java.util.*;import java.io.*;class Main{ public static void main(String[] args) throws IOException { BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); StringTok..
[Algorithm] 99클럽 코테 스터디 2일차 TIL | 백준_랜선 자르기(1654번)
·
Algorithm
https://www.acmicpc.net/problem/1654 해당 문제는 이분탐색 알고리즘으로 분류된다.이분탐색(Binary Search)은 데이터를 반씩 줄여가며 탐색하는 알고리즘으로 원하는 값을 빠르게 찾기 위해 사용되는 알고리즘이다. 랜선 중 가장 긴 길이를 max라는 변수에 넣고중간값을 구한다. mid = (low + high) / 2mid 값으로 랜선을 나누면 랜선 개수가 나오고,랜선 개수의 합이 N개 보다 크다면 mid 값을 증가시키고, N개 보다 작다면 mid 값을 감소시켜야 한다. if(count >= N){ result = mid; low = mid + 1;//랜선의 최대 길이를 찾아야하므로}else{ high = mid - 1;} 랜선의 최대 길이를 찾아야하므로 m..