목록DFS (62)
어흥
문제 링크: https://www.acmicpc.net/problem/15661 15661번: 링크와 스타트 첫째 줄에 N(4 ≤ N ≤ 20)이 주어진다. 둘째 줄부터 N개의 줄에 S가 주어진다. 각 줄은 N개의 수로 이루어져 있고, i번 줄의 j번째 수는 Sij 이다. Sii는 항상 0이고, 나머지 Sij는 1보다 크거나 같고, 100 www.acmicpc.net 1. 주의할 점 - 한팀에는 최소 1명이 있을 수 있고, A팀과 B팀의 인원수는 같지 않아도 된다 - 현재 구현한 방법은 중복된 경우가 있기 때문에(X2) 시간이 2배로 든다 2. 구현 - 브루트포스를 통해 1명~N-1까지 팀을 이뤘을때 각 팀원들에 해당하는 능력치의 합을 구한다 - 브루트포스의 경우, Next_permutation 함수를 ..
문제 링크: programmers.co.kr/learn/courses/30/lessons/43163 코딩테스트 연습 - 단어 변환 두 개의 단어 begin, target과 단어의 집합 words가 있습니다. 아래와 같은 규칙을 이용하여 begin에서 target으로 변환하는 가장 짧은 변환 과정을 찾으려고 합니다. 1. 한 번에 한 개의 알파벳만 바꿀 수 programmers.co.kr 1. 주의할 점 - Map이나 배열을 통해 몇번 만에 Words에 있는 단어에 도착했는지 저장해야 한다 2. 구현 - DFS(현재 문자열, 바꾼 횟수)를 수행하며 DFS 함수 내에는 다음과 같은 조건들이 있다 - DFS() 함수의 가장 처음에는 현재 바꾼 횟수가 이미 구한 정답보다 많다면 Return한다 - 현재 문자열이..
문제 링크: https://www.acmicpc.net/problem/2549 2549번: 루빅의 사각형 첫 번째 줄에는 움직이는 횟수를, 두 번째 줄부터는 한 줄에 하나씩 타일을 움직이는 방법을 순서대로 출력한다. 이때, 격자판의 i번째 행을 k칸 움직였다면 정수 1과 i와 k를 빈칸을 사이에 두고 www.acmicpc.net 1. 주의할 점 - 푸는 방법이 여러가지 존재하지만, 여기서는 백트레킹을 활용해서 해결한다 - 한 열/행을 1~3칸 이동하는것은 전부 1번 옮긴것과 같다 2. 구현 - 현재 배열의 상태(Arr[][])와 최종적으로 원하는 배열의 상태(Corr[][])를 비교하여 틀린 개수를 반환하는 Cal() 함수를 구현한다 - Cal() 함수를 통해 다른 개수를 반환 받은 후, 다음과 같은 가..
문제 링크: https://swexpertacademy.com/main/code/problem/problemDetail.do?contestProbId=AWXRF8s6ezEDFAUo SW Expert Academy SW 프로그래밍 역량 강화에 도움이 되는 다양한 학습 컨텐츠를 확인하세요! swexpertacademy.com 1. 주의할 점 - 매 TC마다 웜홀위치, Arr[][]배열을 초기화 해줘야 한다 - 벽을 전부 블록 5번이라고 생각하고 푼다 [BFS] -1683ms 2. 구현 - 매 X,Y값마다 Arr[Y][X]==1이면 BFS를 시작하며 , Check[][] 배열을 모두 False로 초기화 하고 시작한다 - Queue에 시작 Y,X를 기준으로 4방향을 모두 넣고 시작한다 - Queue에서 원소 1..
문제 링크: https://www.acmicpc.net/problem/3709 3709번: 레이저빔은 어디로 문제 레이저박스라는 게임은 정사각형 모양의 n x n 보드에서 진행한다. (체스판을 상상하면 된다) 레이저박스의 임의의 칸마다 우향우 거울이라는 장치가 설치되어 있고, 마지막으로 레이저 �� www.acmicpc.net 1. 주의할 점 - X,Y의 입력으로 받거나 Y,X 입력으로 받거나 둘중 하나로 통일해야 한다 2. 구현 - Num, Mirror의 수를 입력 받은 후, Arr[][]배열을 항상 0으로 초기화한다 - 우향우 거울인 경우, Arr[][] 배열값을 1로 설정한다 - 어떤 지점에서 레이저가 시작되는지에 따라 4가지의 초기값이 다른 DFS를 수행한다 - DFS()를 통해 범위 밖으로 나가..
문제 링크: https://swexpertacademy.com/main/code/userProblem/userProblemDetail.do?contestProbId=AWlGyBQqaEgDFASG SW Expert Academy SW 프로그래밍 역량 강화에 도움이 되는 다양한 학습 컨텐츠를 확인하세요! swexpertacademy.com 1. 주의할 점 - Check[idx] 배열을 만들어서 값을 기록해놓는다(idx의 경우 최대 몇 번의 Turn이 가능한지) 2. 구현 - 초기에 Check[] 배열을 전부 -1로 초기화하고 한 자리 숫자는 0으로 초기화 한다 - DFS(Sum,Tot,Ss,V)를 통해 해당 Ss를 몇 부분으로 쪼갤 수 있는지 벡터 V에 담는다 - Sum==Tot인 경우, V의 Size가 1..
문제 링크: https://www.acmicpc.net/problem/1941 1941번: 소문난 칠공주 총 25명의 여학생들로 이루어진 여학생반은 5*5의 정사각형 격자 형태로 자리가 배치되었고, 얼마 지나지 않아 이다솜과 임도연이라는 두 학생이 두각을 나타내며 다른 학생들을 휘어잡기 시작�� www.acmicpc.net 1. 주의할 점 - 전부 S를 입력했을 때, 3546이 나와야 한다 - 이다솜파인 학생이 4명 이상 있어야 한다 2. 구현 - DFS와 백트레킹을 통해 구현한다 - DFS(idx,lee,lim) 함수를 통해 각 학생들을 V 벡터에 저장하고, Lee>Lim인 경우에만 V 벡터에 저장된 학생들이 모두 붙어있는지 확인한다 - Check_near() 함수를 통해 각 벡터들이 서로 인접해 있는..
문제 링크: https://www.acmicpc.net/problem/2468 2468번: 안전 영역 재난방재청에서는 많은 비가 내리는 장마철에 대비해서 다음과 같은 일을 계획하고 있다. 먼저 어떤 지역의 높이 정보를 파악한다. 그 다음에 그 지역에 많은 비가 내렸을 때 물에 잠기지 않는 � www.acmicpc.net 1. 주의할 점 - 높이를 1~100까지 모두 시험해보지 말고 가장 낮은 건물높이~가장 높은 건물 높이로 시험한다 2. 구현 - 가장 낮은 건물높이, 가장 높은 건물 높이를 구해서 For문을 반복한다 - 높이 설정을 다르게 할 때 마다 Check[][]배열을 초기화 해준다 - BFS를 통해 잠기는 높이보다 건물이 높으면 Queue에 넣는 방식으로 하며 Cnt를 Result와 비교하며 Re..