99클럽 코테 스터디 20일차 TIL (챌린저): [백준][Java] 1083 소트 - 골드4
·
ProblemSolve/항해99 코테스터디
문제 보기https://www.acmicpc.net/problem/1083  풀이로직은 쉬운데 놓치기 쉬운 부분이 많아서 힘들었다. 내가 생각한 방법은 이렇다.첫 start는 0으로 둔다.start부터 start+S까지 값을 검사한다. (물론 start+S가 N을 넘어가지 않아야 함.)그중 max 값을 뽑는다. 위와 같은 상황이라면 5이다.그럼 이 max의 인덱스부터 start까지 양 옆의 숫자들을 교환한다.여기서는 3과 5만 교환하면 끝이다.  한 번 옮겼기 때문에 남은 s의 값은 2이다.이 값은 max의 index - start로 정한다.이 로직대로라면 맨 앞에 올 수 있는 최고로 큰 수가 왔다는 뜻이니start를 ++ 해준다.다음으로 넘어가자.이번엔 start와 max의 index가 같다.그렇다면 ..
99클럽 코테 스터디 19일차 TIL (챌린저): [백준][Java] 1022 소용돌이 예쁘게 출력하기 - 골드3
·
ProblemSolve/항해99 코테스터디
문제 보기https://www.acmicpc.net/problem/1022  풀이이 문제의 핵심은 특정 좌표에 어떤 수가 들어올지 점화식을 구하는 것이다.이 표를 뜯어보며 어떤 특징을 갖고 있는지 살펴보자. 1. 구역 찾기우선 위와 같이 구역을 나눠 볼 수 있을 것 같다.그럼 특정 좌표의 구역이 어디에 해당하는지 어떻게 구하면 좋을까?x(c), y(r)의 값 중 절댓값이 더 큰 쪽을 고르면 되지 않을까?int l = Math.max(Math.abs(r), Math.abs(c)); 2. 구역 시작 수 구하기구역을 찾았으니 이 구역의 시작 수부터 돌면서 숫자를 구해볼 수 있을 것 같다.1은 무시하고 시작 수를 확인하자.2, 10, 26, 501^2 + 1, 3^2 + 1, 5^2 + 1, 7^2 + 1.....
99클럽 코테 스터디 18일차 TIL (미들러): [백준][Java] 2212 센서 - 골드5
·
ProblemSolve/항해99 코테스터디
문제 보기https://www.acmicpc.net/problem/2212  풀이처음엔 지문이 이해되지 않았다.그래서 시간을 많이 소비하였다. 예제 1번을 우선 오름차순으로 정렬해보자. 우선 처음 나오는 센서인 1번에 집중국이 하나 있다고 생각해보자.전체 길이는 9가 된다. 그리고 집중국은 두 곳 놓을 수 있다.직관적으로 생각해서 어디에 놓으면 좋을까? 나라면 6번에 놓을 것 같다.3 - 1 = 2, 9 - 6 = 3총거리는 5가 된다. 사실 나는 문제를 제대로 이해하지 못해서 아래와 같은 상황을 생각했었으나 집중국으로부터 떨어진 정도(반지름의 길이)가 아니라 총거리를 구하는 것이었다. 어찌 됐든 6번에 놓으면 좋겠다는 건 어떤 생각을 해서 결론이 그렇게 나왔던 걸까?아무래도 3~6 거리가 3이나 되기 ..
99클럽 코테 스터디 17일차 TIL (챌린저): [백준][Java] 2056 작업 - 골드4
·
ProblemSolve/항해99 코테스터디
문제 보기https://www.acmicpc.net/problem/2056  풀이최소 시간을 구하는 문제이지만그래프 탐색을 한다고 생각해보면 선행해야 하는 작업 중 가장 느린 작업이 끝나는 시간을 반영해야 하기 때문에BFS를 진행하며 최대 시간을 구하는 방법을 생각했었다...import java.io.BufferedReader;import java.io.BufferedWriter;import java.io.IOException;import java.io.InputStreamReader;import java.io.OutputStreamWriter;import java.util.LinkedList;import java.util.List;import java.util.Queue;import java.util...
99클럽 코테 스터디 16일차 TIL (챌린저): [백준][Java] 2179 비슷한 단어 - 골드4
·
ProblemSolve/항해99 코테스터디
문제 보기https://www.acmicpc.net/problem/2179  풀이HashMap을 사용해 문제를 풀었다.입력 순서대로 단어와 인덱스를 넣었다.이 때 단어의 길이-1을 해가며 접두사들을 넣었다.우선순위가 높은 값(최대한 비슷한 단어)부터 넣기 위해서인데 이유는 아래에 나온다. for (int i = 0; i 0; j--) { String key = line.substring(0, j); if(key.length() s) break; if(key.length() == length && map.get(key) == s && i > t) break; s = map.get(key); t = i; length = key.length(); br..
99클럽 코테 스터디 15일차 TIL (챌린저): [백준][Java] 2665 미로만들기 - 골드4
·
ProblemSolve/항해99 코테스터디
문제 보기https://www.acmicpc.net/problem/2665  풀이bfs에 다익스트라 논리를 적용하면 풀 수 있다.특정 칸 까지 걸리는 최소 검은 방을 최단거리로 생각하면 된다. int[] dx = {-1, 1, 0, 0};int[] dy = {0, 0, -1, 1};Queue q = new LinkedList();int[][] dist = new int[N][N];for(int i = 0; i = N || y >= N) continue; if(matrix[x][y]) { if(dist[x][y] == -1 || dist[x][y] > cur[2] + 1) { dist[x][y] = cur[2] + 1; q.add(new int[]{x, y, dist..
99클럽 코테 스터디 14일차 TIL (미들러): [백준][Java] 14916 거스름돈 - 실버5
·
ProblemSolve/항해99 코테스터디
문제 보기https://www.acmicpc.net/problem/14916  풀이힌트를 보면 그리드, DP를 사용할 수 있는 문제인 것 같다.나는 DP가 더 익숙해서 DP를 사용하였다.즉 거스름 돈이 0부터 N원일 때까지 얼마가 나올지를 계산해보는 방법을 선택했다. int[] dp = new int[N 우선 0~5까지는 미리 값을 계산하여 넣어 놨다.혹시나 input으로 5보다 작은 값이 들어올 경우에도 dp 배열의 크기를 6으로 하도록 했다.여기서 -1이 나와야 하는 값의 경우 100000이라는, 절대 나올리 없는 임의의 큰 값을 넣었다. for (int i = 6; i 이후 반복문을 돌리며5원 더 작은 값에서 5원을 추가한 상황,2원 더 작은 값에서 2원을 추가한 상황 중 더 작은 경우를 골랐다.만..
99클럽 코테 스터디 13일차 TIL (미들러): [백준][Java] 27961 고양이는 많을수록 좋다 - 브론즈1
·
ProblemSolve/항해99 코테스터디
문제 보기https://www.acmicpc.net/problem/27961  풀이오늘은 쉬운 문제가 나왔다!우선 최대한 전체 복제 마법으로 N에 가까운 많은 고양이들을 만들고 일부분만 복제하여 N을 채우면 될 것 같다.그렇게 1에서부터 계속 2배 마법을 걸 경우, 2의 n승으로 늘어나게 된다. long i = N == 0 ? 0 : 1, k = 1;for(; k * 2 따라서 위와 같은 간단한 for문을 N보다 작거나 같을 때까지 돌리고 i를 ++하여 몇 승인제 체크하였다.i가 N이 0일 경우는 0, 아니면 1인데 이 이유는 입력으로 0이 들어왔을 때의 예외처리를 위해서이다. bw.write(i + (N > k ? 1 : 0) + "\n");출력부분이다.k값이 N과 같은 경우 부분 복제 마법을 쓸 필요..