baekjoon/Implementation 13

백준 21610번 : 마법사 상어와 비바라기 [자바]

🧫 문제 분석 ✔️ 출처마법사 상어와 비바라기 골드 5 📖 문제구현이 확실히 재밌는 것 같다. 이동 문제에서 거리가 주어지면 방향이 -방향일때 거리가 N을 넘어가는 경우이를 나머지연산 처리해주지않으면 - 인덱스가 된다. 그외에는 구름을 삭제한 칸 체크만 해주면아주쉽게 풀 수 있는 문제다. 🔅 문제 풀이import java.beans.Customizer;import java.io.*;import java.util.*;public class Main { static int N, M; static int[][] map; static int[] dr = {0, -1, -1, -1, 0, 1, 1, 1}; static int[] dc = {-1, -1, 0, 1, 1, 1, 0, -..

백준 21609번 : 상어 중학교 [자바]

🧫 문제 분석 ✔️ 출처상어 중학교 골드 2 📖 문제 알고리즘은 잘짰는데 1번 조건을 만족하는 그룹 위치 갱신할때 최대 무지개 블록수를 한 조건문에서 안해서 계속 틀렸다. 중력은 좀 복잡하게 짰다. 아래 행부터 위로 올라가서 빈 공간을 체크하고 일반 블록을 끌어 당기는 방식이다.배열 회전은 이전 문제에서 배운대로 회전 공식을 사용하여 간단하게 구현하였다. 🔅 문제 풀이import java.beans.Customizer;import java.io.*;import java.util.*;public class Main { static int N, M; static int[][] map; static int[] dr = {0, 1, 0, -1}; static int[] dc = {-..

백준 21608번 : 상어 초등학교 [자바]

🧫 문제 분석✔️ 출처상어 초등학교 골드 5 📖 문제빈 N*N에 순서대로 학생들을 하나씩 배치한다 3번 조건을 쉽게 해결하기 위해(0,0) 부터 (N,N)까지 -> 방향으로 탐색을 시작하여 따로 조건 처리하지 않게 한다. 인접하다는 결국 상하좌우를 뜻하며빈 공간과 현재 인접한 좋아하는 학생 수를 비교해나가면서 탐색하면 된다. 인접한 좋아하는 학생을 1명도 발견 못했다면 빈칸이 제일 많은 곳을 선점한다. 인접한 좋아하는 학생수가 1명 이상이면서 탐색중 보다 더 많다면 그 자리를 선점한다. 만약 같다면 빈칸이 더 많은 곳을 선점한다. 문제 및 해결탐색하면서 기록하는 curEmpty와 curLike를 0으로 초기화해서 잘못된 자리배치가 되었다.-1로 초기화해주어 해결하였다. 🔅 문제 풀이impor..

백준 20058번 : 마법사 상어와 파이어스톰 [자바]

🧫 문제 분석 ✔️ 출처마법사 상어와 파이어스톰 골드 3 📖 문제 모든 칸을 격자로 나누고 90도 회전 후 인접한 얼음이 있는 칸이 3개 미만이면 얼음의 양이 - 1로 줄어든다 (이는 동시다발로 일어난다.) 격자 나누는걸 좀 복잡하게 구현했더니 좀 느리긴한데(700ms) 회전하는 로직만 바꾸면 충분히 빠르게 될거라고 생각된다. 찾아보니 2차원 배열 회전 공식이 있어 공부했다.참조: https://taaewoo.tistory.com/10🔅 문제 풀이import java.beans.Customizer;import java.io.*;import java.util.*;public class Main { static int N, Q, size; static int[][] map; stat..

백준 20056번 : 마법사 상어와 파이어볼 [자바]

🧫 문제 분석 ✔️ 출처마법사 상어와 파이어볼 골드 4 📖 문제 뭔가 생각보다 어려웠다. 항상 짜잘한거에서 틀려서 그렇지 전체적인 로직은 잘 짰다. 어려웠던것중첩 파이어볼을 어떻게 저장해놓을까 -> List[][] 로 처리하면 시간복잡도는 괜찮은가, K만큼 재생성해야함 -> O(K)중첩 파이어볼은 어떻게 처리할까-> 위에 저장한 파이어볼 식별값을 사용해 한번에 더한 다음 연산후 처리 소멸조건에서if (sumM/5 == 0)을 비교해야하는데 sumM을 비교해서 틀렸다. 이것만 빼면 다른 로직은 다 정상작동했다. 🔅 문제 풀이import java.beans.Customizer;import java.io.*;import java.util.*;public class Main { static int ..

백준 20061번 : 모노미노도미노 2 [자바]

🧫 문제 분석 ✔️ 출처모노미노도미노 2 골드 2 📖 문제 게임 개발하는 거 같아 좀 재밌었다. 빨간 칸에 입력으로 주어지는 좌표와 도형 형태를오른쪽, 아래로 2개의 도형이 내려가는 형태의 테트리스 같은 게임이다. boolean 2차원 타입으로 현재 테트리스 상태를 저장한 라인이 전부 도형 즉, 가득 찬 상태는& 연산자를 통해서 확인 연한 색의 부분은 라인 개수를 세고 그 개수만큼 띄어서 옮기기 🔅 문제 풀이import java.io.*;import java.util.*;import java.util.stream.IntStream;public class Main { // 20061번 모노미노도미노 2 // 블록은 한번 보드 위에 놓이면 다른 블록과 합쳐지지 않음 // 1. 점수를..

백준 17822번 : 원판 돌리기 [자바]

🧫 문제 분석 ✔️ 출처원판 돌리기 골드 2 📖 문제 문제가 이해가 되는듯 안되는 문제였다. 진행 프로세스인데2번줄부터 이해가 안간다. 인접하면서 수가 같은 것을 모두 찾는다 -> 돌려진 상태에서 모든 원판의 인접하면서 수가 같은 것을 모두 찾는다.그러한 수가 있는 경우 -> 인접하면서 수가 같은 게 1개라도 있는 경우없는 경우 -> 인접하면서 수가 같은게 1개도 없는 경우원판에 적힌 수의 평균 -> 모든 원판에 적힌 수의 평균 평균보다 큰 수에서 -1, 작은거에서 +1문제에서는 당연히 소수점을 버린다는 말이 없었는데 내 멋대로 소수점을 버려서 예제 마지막이 실패했다.평균을 소수점을 포함해서 비교해야한다. 🔅 문제 풀이import java.io.*;import java.util.*;public..

백준 15685번 : 드래곤 커브 [자바]

🧫 문제 분석 ✔️ 출처드래곤 커브 골드 3 📖 문제 재밌는 문제였다. 끝지점을 기준으로 회전시켜서 선분을 복사 핵심 끝지점 기준 회전 방법기존 세대 드래곤 커브 복사 풀이기존 드래곤 세대의 끝지점부터 시작지점 순으로 탐색하면서각 지점에 들어오는 방향을 기준으로 회전시킨다음 현재 위치에서 해당 방향으로 1칸씩 전진하면서 해결하였다.이동한 방향를 다시 현재 위치로 갱신하면서 진행한다. 자료구조현 세대의 시작부터 끝지점까지의 방향정보를 담는 Deque새로운 세대의 드래곤 커브를 임시 저장할 Queue 🔅 문제 풀이import java.io.*;import java.util.*;public class Main { // 15684번 사다리 조작 static int N; stat..

백준 15684번 : 사다리 조작 [자바]

🧫 문제 분석 ✔️ 출처사다리 조작 골드 3 📖 문제 i번째 사다리로 시작해서 i번째 사다리로 끝나도록 가로선을 최소한으로 추가하는 문제다. 가로선은 최대 3개까지 추가할 수 있고불가능하거나 3개를 넘어가면 -1로 반환한다. 1. 현 상태 사다리 시뮬레이션 구현2. 가로선을 추가시 인접한 사다리의 가로선과 맞닿는지 확인 그리고 처음에 풀이시 2200ms가 나왔다.그저 낮은 깊이부터 탐색하면 되는데 굳이 처음부터 3까지 탐색해서 시간이 이렇게 나왔다. 깊이 1일떄 조합깊이 2일때 조합깊이 3일때 조합 순으로 탐색하면 깊이가 낮을때 먼저 답 발견시 빠르게 끝날 수 있다. 🔅 문제 풀이import java.io.*;import java.util.*;import java.util.jar.JarEn..

백준 15683번 : 감시 [자바]

🧫 문제 분석 ✔️ 출처감시 골드 3 📖 문제 완전탐색 + 구현 + 백트래킹 문제 핵심CCTV 감시 모든 경우의 수 탐색 (이미 감시한 곳은 넘어가고, CCTV를 넘어설 수 있음)CCTV 방향에 대한 탐색을 구현하는 방법 풀며서 실수한게항상 그렇듯, 변수 새로 생성하고 이전 변수를 안고쳐서변수에 값을 -1 빼서 사용한다 해놓고 정작 리턴하는 곳에서는 -1을 안해서 틀림. 로직을 짜고 좀 더 세심히 머리로 시뮬레이션을 그리며 코드를 점검해볼 필요가 있다.🔅 문제 풀이import java.io.*;import java.util.*;public class Main { // 15683번 감시 static int[] dr = {-1, 0, 1, 0}; static int[] dc = {0..