본문 바로가기

dfs

(10)
[Softeer] [21년 재직자 대회 본선] 거리 합 구하기 / problemid 635 [JAVA] 문제링크 : https://softeer.ai/practice/info.do?eventIdx=1&psProblemId=635&sw_prbl_sbms_sn=39796 Softeer Problem을 담을 Box를 선택해 주세요. 취소 확인 softeer.ai 모든 노드간 연결돼 있고 간선이 N-1개인 그래프는 트리다 모든 노드마다 다른 모든 노드와 거리의 합을 구한다면 N이 최대 2*10^5 이므로 단순하게는 불가능 해보인다 1번 노드를 루트로 하고 노드간 거리의 합을 먼저 구해보자 1번 노드를 루트로 하는 트리 1번에서 3번,5번,6번 노드로 가기 위해서는 빨간 간선을 지나가야 한다. 그러므로 빨간 간선은 2*3인 6을 정답값에 더해주는 간선이다. 마찬가지로 가중치가 5인 간선은 노드 2만을 위해 지나는 ..
[Softeer] [21년 재직자 대회 본선] 비밀메뉴2 / ProblemId 633 [JAVA] 문제 링크 : https://softeer.ai/practice/info.do?eventIdx=1&psProblemId=633 Softeer Problem을 담을 Box를 선택해 주세요. 취소 확인 softeer.ai 재직자 본선 문제 1번 A수열과 B 수열의 가장 긴 '연속된' 공통 부분 수열의 길이를 찾는 문제이다 방법 1. 길이를 1~3000까지 시도해보는 것이다. -> 3000(N) * 3000(M) * 2999 * 3000 / 2 (1~3000까지의 합) -> 1~3000까지 시도해볼 필요가 없다 (1500을 시도했을 때 실패했다면 0~1499중에 정답이 있다) -> 이분탐색으로 3000(N) * 3000(M) * 12이 가능하다. -> 그래도 시간 내에 해결하기 불가능해 보인다. 2. 연속된 ..
[백준] 21609번 상어 중학교 [C++] 문제링크 : www.acmicpc.net/problem/21609 21609번: 상어 중학교 상어 중학교의 코딩 동아리에서 게임을 만들었다. 이 게임은 크기가 N×N인 격자에서 진행되고, 초기에 격자의 모든 칸에는 블록이 하나씩 들어있고, 블록은 검은색 블록, 무지개 블록, 일반 블록 www.acmicpc.net 친구가 빨리풀기 대결하자고 해서 언어를 맞추기위해 오랜만에 C++로 풀었다. 최근 삼성 역량테스트 문제다. 그래서 구현이 조금 까다롭지만 시키는대로 잘 하면 된다. 이런 문제를 많이 풀어보는 게 삼성 역량테스트에서 중요한 것 같다. 메인함수부터 순서대로 설명하면 이렇다. 조건에 해당하는 블럭이 있을 경우(loop==true) 반복한다. 블럭 묶음의 갯수를 파악하기 위해 dfs함수를 호출했다. 0..
[백준] 1248 맞춰봐 문제링크 : www.acmicpc.net/problem/1248 1248번: 맞춰봐 규현이는 멍청하다. 왜냐하면, 1~10까지 수 밖에 모르기 때문이다. 어느 날 규현이 옆을 지나가던 태석이가 규현이를 보고 이렇게 외쳤다. "빵빵!!" 규현이는 "아하!" 하면서 세상에는 빵이란 수도 www.acmicpc.net import java.io.*; import java.util.*; public class Main { public static int N; public static int ans[]; public static boolean visited [][]; public static String query; public static int len; public static char str[][]; publ..
[백준] 2023 신기한 소수 문제링크 : www.acmicpc.net/problem/2023 2023번: 신기한 소수 수빈이가 세상에서 가장 좋아하는 것은 소수이고, 취미는 소수를 가지고 노는 것이다. 요즘 수빈이가 가장 관심있어 하는 소수는 7331이다. 7331은 소수인데, 신기하게도 733도 소수이고, 73도 소수 www.acmicpc.net 처음에 문제를 보자마자 소수를 미리 구해두는 편이 편하다고 생각했지만 8자리까지 구하려고 하니 에라토스테네스의체로도 불가능할 것으로 생각했다. 메모리 제한은 4MB인 문제였다. 그래서 N자리인 수의 가장 큰 자리수부터 부분자리가 소수인 수들을 찾아갈 생각을 했다. 1부터 9까지의 수들을 넣어보고 소수이면 다음자리에 들어갈 수 있는 수를 다시 넣는 방식을 N자리의 수가 될 때까지 탐색했다...
[백준] 2169 로봇 조종하기[JAVA] 문제링크 : www.acmicpc.net/problem/2169 2169번: 로봇 조종하기 첫째 줄에 N, M(1≤N, M≤1,000)이 주어진다. 다음 N개의 줄에는 M개의 수로 배열이 주어진다. 배열의 각 수는 절댓값이 100을 넘지 않는 정수이다. 이 값은 그 지역의 가치를 나타낸다. www.acmicpc.net 로봇은 왼쪽, 오른쪽 ,아래쪽으로만 움직일 수 있다. N,M까지 이동하는데 가치의 합이 최대가 되는 경우의 그 가치의 합을 출력하는 문제다. 가치는 음수가 될 수 있는 것에 유의한다. 모든 경로를 탐색하며 가치의 합이 최대인 경우를 저장하는 방식을 쉽게 생각해볼 수 있다. 1,1에서 N,M까지의 가치의 최대합은 1,1에서 특정 지점까지의 가치의 최대합 + 그 특정 지점에서 N,M까지의 가치..
[백준] 14267 회사 문화1 문제링크 : www.acmicpc.net/problem/14267 14267번: 회사 문화 1 영선회사에는 매우 좋은 문화가 있는데, 바로 상사가 직속 부하를 칭찬하면 그 부하가 부하의 직속 부하를 연쇄적으로 칭찬하는 내리 칭찬이 있다. 즉, 상사가 한 직속 부하를 칭찬하면 그 부하 www.acmicpc.net 1번인 사장을 제외하고 모든 사원은 직속 상사를 1명을 가지기 때문에 회사 구조를 트리 형태라고 할 수 있다. 칭찬은 해당직원을 상사로 갖는 모든 부하로 계속 전파하기 때문에 연결된 모든 하위 트리를 탐색하면 된다. 그것을 구현하기 위해 dfs를 사용하였다. 처음에, M번 쿼리가 발생할 때마다 dfs를 수행하는 비효율적인 방법으로 코드를 짰었다. 이는 단순히, 쿼리에 대해 직원의 cost를 미리 ..
[해커랭크] Roads and Libraries [JAVA] 문제링크: www.hackerrank.com/challenges/torque-and-development/problem Roads and Libraries | HackerRank Help the ruler of HackerLand determine the cheapest way to give his citizens access to libraries. www.hackerrank.com 모든 노드들을 잇는 최소한의 간선 개수는 노드의 갯수 -1이다. 그래서 도로를 고쳐서 도서관을 공유하는 비용을 최소한 하려면 도로를 N-1개만 고치면 된다. (MST 구성) 고장난 도로를 탐색해서 노드가 몇개인지 파악하기 위해 dfs 탐색을 했다. 또, N-1개의 도로의 수리비용보다 모든 노드에 도서관을 설치하는 비용이 적..