본문 바로가기

dfs8

Programmers - 사라지는 발판(Java) https://programmers.co.kr/learn/courses/30/lessons/92345 코딩테스트 연습 - 사라지는 발판 [[1, 1, 1], [1, 1, 1], [1, 1, 1]] [1, 0] [1, 2] 5 [[1, 1, 1], [1, 0, 1], [1, 1, 1]] [1, 0] [1, 2] 4 programmers.co.kr 풀이 다음 2가지의 경우에 승패가 결정됨 상하좌우 4방향 중 어떠한 방향으로도 이동 불가인 경우 하나의 발판에 2명이 위치할 때, 한명이 다른 발판으로 이동하여 현재 발판이 사라질 때 지는 플레이어든 이기는 플레이어든 각자 최적의 플레이로 진행 이기는 플레이어 - 최대한 빨리 승리하는 방향으로 진행 -> 움직이는 횟수를 최소화 지는 플레이어 - 최대한 오래 버티는.. 2022. 2. 3.
Programmers - 양과 늑대(Java) https://programmers.co.kr/learn/courses/30/lessons/92343 코딩테스트 연습 - 양과 늑대 [0,0,1,1,1,0,1,0,1,0,1,1] [[0,1],[1,2],[1,4],[0,8],[8,7],[9,10],[9,11],[4,3],[6,5],[4,6],[8,9]] 5 [0,1,0,1,1,0,1,0,0,1,0] [[0,1],[0,2],[1,3],[1,4],[2,5],[2,6],[3,7],[4,8],[6,9],[9,10]] 5 programmers.co.kr 풀이 풀이에 필요한 변수 정의 및 초기화 탐색마다 갱신해야하는 최대 양의 수 해당 index의 자식 Node를 담고 있는 ArrayList배열 함수내에서 편하게 쓰기위한 입력값 info와 같은 값으로 전역변수 정의.. 2022. 1. 24.
BOJ 2638 - 치즈(Java) https://www.acmicpc.net/problem/2638 2638번: 치즈 첫째 줄에는 모눈종이의 크기를 나타내는 두 개의 정수 N, M (5 ≤ N, M ≤ 100)이 주어진다. 그 다음 N개의 줄에는 모눈종이 위의 격자에 치즈가 있는 부분은 1로 표시되고, 치즈가 없는 부분은 0으로 www.acmicpc.net 풀이 매 시간마다 외부 공기와 2변 이상 접촉하면 해당 위치의 치즈가 녹음 외부 공기 판별 가장자리에는 치즈가 없다. -> 모든 가장자리는 외부 공기 (0, 0)의 위치로 부터 시작 해서 치즈를 만나지 않는 위치로 dfs 탐색을 이용하여 외부 공기 판별 가능 private static void checkExternalAir(int i, int j) { visit[i][j] = true.. 2021. 12. 20.
BOJ 23290 - 마법사 상어와 복제(C++) https://www.acmicpc.net/problem/23290 23290번: 마법사 상어와 복제 첫째 줄에 물고기의 수 M, 상어가 마법을 연습한 횟수 S가 주어진다. 둘째 줄부터 M개의 줄에는 물고기의 정보 fx, fy, d가 주어진다. (fx, fy)는 물고기의 위치를 의미하고, d는 방향을 의미한다. 방향 www.acmicpc.net 풀이 한 위치에 물고기가 여러 마리일 수 도 있기 떄문에 vector fish[][]로 저장, 값은 물고기의 방향성 상어가 물고기를 먹었다면 냄새를 남기는 이차원 배열 smell[][]을 이용 smell[y][x]= 현재 연습 시점의 index을 남기고, 물고기가 이동할 때 이동 가능한지의 여부를 확인 할때, 현재 연습 시점 index - smell[y][x] 가.. 2021. 11. 27.
BOJ 2615 - 오목(C++) https://www.acmicpc.net/problem/2615 2615번: 오목 오목은 바둑판에 검은 바둑알과 흰 바둑알을 교대로 놓아서 겨루는 게임이다. 바둑판에는 19개의 가로줄과 19개의 세로줄이 그려져 있는데 가로줄은 위에서부터 아래로 1번, 2번, ... ,19번의 번호 www.acmicpc.net 풀이 자표와 방향성에 대해 탐색했는지 확인을 위한 bool 3차원 배열 visit 사용 오목판의 현재 위치에 대해 8방향을 탐색해야하지만 2중 for문을 이용해 왼쪽에서 오른쪽, 위에서 아래로 탐색하기 때문에 4방향으로만(동, 남동, 남, 남서) 제한하여 탐색 위의 방향으로 탐색할 경우 (1, 1)을 시작으로 연속되었는지 확인 한 후 (2, 2)에서 (1, 1)로 연속성을 확인 비효율적이고 vis.. 2021. 10. 5.
BOJ 19236 - 청소년 상어(C++) https://www.acmicpc.net/problem/19236 19236번: 청소년 상어 첫째 줄부터 4개의 줄에 각 칸의 들어있는 물고기의 정보가 1번 행부터 순서대로 주어진다. 물고기의 정보는 두 정수 ai, bi로 이루어져 있고, ai는 물고기의 번호, bi는 방향을 의미한다. 방향 bi는 www.acmicpc.net 풀이 상어의 위치는 (0, 0)에서 시작 1. 현재위치의 물고기 먹음 - 먹은 물고기의 번호를 누적 합 - 먹은 물고기의 방향을 가짐 2. 물고기 이동 - 죽은 물고기는 제외하고 이동 - 번호가 낮은 물고기부터 이동, 이동하는 위치에 다른 물고기가 있다면 위치 교환 - 해당 위치로 이동하지 못한다면 45도 반시계 회전 후 탐색 - 어느 방향으로도 이동하지 못하면 현재 위치 유지 .. 2021. 9. 1.
BOJ 1405 - 미친로봇(C++) https://www.acmicpc.net/problem/1405 1405번: 미친 로봇 첫째 줄에 N, 동쪽으로 이동할 확률, 서쪽으로 이동할 확률, 남쪽으로 이동할 확률, 북쪽으로 이동할 확률이 주어진다. N은 14보다 작거나 같은 자연수이고, 모든 확률은 100보다 작거나 같은 자 www.acmicpc.net 풀이 N이 14보다 작거나 같기 때문에 시작점을 (14, 14)로 설정 dfs를 사용하여 해당방향으로 갈 확률을 곱해주는 방식으로 진행 더보기 ex) 테스트 케이스 N=2, [25, 25, 25, 25]의 경우 : (동서남북의 확률이 같아 처음 한방향의 확률값 x 4로 계산 가능) 1/4 x (1/4 + 1/4 +1/4) x 4 = 0.75 절대/상대 오차는 10-9 -> 소수점 아래 10자리.. 2021. 8. 24.
Programmers - 다단계 칫솔 판매(C++) https://programmers.co.kr/learn/courses/30/lessons/77486?language=cpp 코딩테스트 연습 - 다단계 칫솔 판매 민호는 다단계 조직을 이용하여 칫솔을 판매하고 있습니다. 판매원이 칫솔을 판매하면 그 이익이 피라미드 조직을 타고 조금씩 분배되는 형태의 판매망입니다. 어느정도 판매가 이루어진 후, programmers.co.kr 풀이 map을 이용하여 부모-자식 관계를 확인, 판매수익이 발생한 seller부터 부모가 없을 때("-")까지 발생 수익의 10%로 넘겨줌 #include #include #include using namespace std; map parent; map gain; void update_gain(string now, int sell_g.. 2021. 8. 17.