전체 글411 [알고리즘] DFS & BFS 목차 DFS (깊이 우선 탐색) DFS (Depth-First Search)는 깊이 우선 탐색이라고도 하며, 그래프에서 깊은 부분을 우선적으로 탐색하는 알고리즘이다. DFS는 재귀나 스택을 이용해서 구현을 한다. DFS를 구현할 때 어떤 노드를 방문했었는지 꼭 검사를 해야 한다. 왜냐하면 이를 검사하지 않을 경우 무한루프에 빠질 수 있기 때문이다. 보통 모든 노드를 방문하고자 할 때, DFS를 이용한다. 하지만, 검색 속도는 보통 BFS보다 느리다. 구현 방법 : 1. 탐색 시작 노드를 스택에 삽입하고, 방문 처리한다. 2. 스택의 최상단 노드에 방문하지 않은 인접 노드가 있으면 그 인접 노드를 스택에 넣고 방문 처리하고, 방문하지 않은 인접 노드가 없으면 스택에서 최상단 노드를 꺼낸다. 3. 위의 1번.. 2022. 5. 23. [알고리즘] 플로이드 와샬 (Floyd Warshall) 목차 플로이드 와샬이란? 다익스트라 알고리즘은 하나의 노드에서 출발했을 때 다른 모든 노드로의 최단 경로를 구하는 알고리즘이다. 하지만 플로이드 와샬 알고리즘은 모든 노드에서 모든 노드로의 최단 경로를 구하는 알고리즘이다. 그리고 다익스트라 알고리즘은 가장 적은 비용을 하나씩 선택을 해서 그 적은 비용을 가지는 노드의 인접한 노드들로 가는 비용을 하나씩 계산하는 방식이었다면 플로이드 와샬 같은 경우는 거쳐가는 노드를 기준으로 알고리즘을 수행한다는 특징이 있다. 추가로 플로이드 와샬은 다이나믹 프로그래밍 기법을 사용한 알고리즘이고, 인접 행렬을 이용하여 각 노드 간 최소의 비용을 계산한다. 플로이드 와샬 예시 위와 같은 그래프가 있다고 가정해 보겠다. 그리고 각각의 노드에서 다른 노드로 가는 비용을 2차원.. 2022. 5. 21. [백준] 10156번 : 과자 – JAVA [자바] https://www.acmicpc.net/problem/10156 10156번: 과자 첫 번째 줄에는 과자 한 개의 가격 K, 사려고 하는 과자의 개수 N, 현재 동수가 가진 돈 M이 각각 공백을 사이에 두고 주어진다. 단, K, N은 1,000 이하의 양의 정수이고, M은 10만 이하의 양의 정수이 www.acmicpc.net 문제 문제 풀이 백준 10156번 과자는 브론즈 4 난이도의 수학 문제이다. 이 문제에서는 과자 1개의 가격 k, 사려고 하는 과자의 개수 n, 그리고 현재 가진 돈 m이 주어진다. 이때 부족한 돈만큼 부모님한테 받는데 부모님한테 받아야 하는 돈의 액수를 출력하면 된다. 만약에 돈을 부모님한테 받을 필요가 없으면 0을 출력하면 된다. 우선 총금액인 price = k × n을 구.. 2022. 4. 28. [백준] 10797번 : 10부제 – JAVA [자바] https://www.acmicpc.net/problem/10797 10797번: 10부제 서울시는 6월 1일부터 교통 혼잡을 막기 위해서 자동차 10부제를 시행한다. 자동차 10부제는 자동차 번호의 일의 자리 숫자와 날짜의 일의 자리 숫자가 일치하면 해당 자동차의 운행을 금지하는 www.acmicpc.net 문제 문제 풀이 백준 10797번 10부제는 브론즈 4 난이도의 구현 문제이다. 이 문제는 서울시에서 시행하는 10부제에 대한 문제이다. 자동차 10부제는 자동차 번호의 일의 자리 숫자와 날짜의 일의 자리 숫자가 같으면 해당 자동차의 운행을 금지하는 정책이다. 이 문제에서는 날짜의 일의 자리 숫자 n이 주어지고 그다음 줄에 5대의 자동차 번호의 일의 자리 숫자가 주어진다. 그리고 이 5개의 숫자 중.. 2022. 4. 28. [백준] 2845번 : 파티가 끝나고 난 뒤 – JAVA [자바] https://www.acmicpc.net/problem/2845 2845번: 파티가 끝나고 난 뒤 파티가 끝나고 나면, 사람들은 누가 파티에 왔는지와 얼마나 많은 사람들이 왔는지를 궁금해한다. 보통 파티는 매우 크게 열리기 때문에, 정확하게 몇 명이 참가했는지 알 수가 없다. 지난주 토 www.acmicpc.net 문제 문제 풀이 백준 2845번 파티가 끝나고 난 뒤는 브론즈 5 난이도의 수학 및 구현 문제이다. 이 문제에서는 1m^2당 사람의 수, 넓이, 그리고 각 기사에 실려있는 사람의 수 5개가 주어진다. 이때 계산된 사람의 수와 각 기사에 적혀있는 사람의 수의 차이를 구하면 된다. 이 문제는 StringTokenizer만 쓰면 너무 쉽게 풀 수 있는 문제이다. 우선 StringTokenizer을.. 2022. 4. 28. [백준] 10546번 : 배부른 마라토너 – JAVA [자바] https://www.acmicpc.net/problem/10546 10546번: 배부른 마라토너 마라토너라면 국적과 나이를 불문하고 누구나 참가하고 싶어하는 백준 마라톤 대회가 열린다. 42.195km를 달리는 이 마라톤은 모두가 참가하고 싶어했던 만큼 매년 모두가 완주해왔다. 단, 한 명 www.acmicpc.net 문제 문제 풀이 백준 10546번 배부른 마라토너는 실버 4 난이도의 맵을 이용한 문제이다. 이 문제에서는 n명의 마라토너의 이름들이 주어지고 그다음 n - 1줄에는 완주한 마라토너의 이름들이 주어진다. 이때 완주하지 못한 마라토너의 이름을 출력해주면 된다. 이 문제는 해시 맵을 이용 해서 간단히 풀 수 있다. 우선 해시 맵 map을 선언하는데 키는 이름을 저장할 거 이므로 String형.. 2022. 4. 28. [백준] 10699번 : 오늘 날짜 – JAVA [자바] https://www.acmicpc.net/problem/10699 10699번: 오늘 날짜 서울의 오늘 날짜를 출력하는 프로그램을 작성하시오. www.acmicpc.net 문제 문제 풀이 백준 10699번 오늘 날짜는 브론즈 5 난이도의 구현 문제이다. 이 문제는 되게 간단한 문제이고 이 문제보다 더 쉬운 문제가 있나 싶을 정도이다. 이 문제에서는 오늘 날짜만 "YYYY-MM-DD" 형식으로 출력해주면 된다. 예를 들어서 2022년 4월 28일이면 "2022-04-28"만 출력하면 끝난다. 코드 import java.io.*; import java.util.*; public class Main { public static void main(String[] args) throws IOException {.. 2022. 4. 28. [백준] 7567번 : 그릇 – JAVA [자바] https://www.acmicpc.net/problem/7567 7567번: 그릇 그릇을 바닥에 놓았을 때 그 높이는 10cm 이다. 그런데 두 개의 그릇을 같은 방향으로 포개면 그 높이는 5cm만 증가된다. 만일 그릇이 서로 반대방향으로 쌓이면 높이는 그릇만큼, 즉 10cm 늘어난다. www.acmicpc.net 문제 문제 풀이 백준 7567번 그릇은 브론즈 2 난이도의 구현 및 문자열 문제이다. 이 문제는 그리고 한국 정보올림피아드 2013 초등부에 나왔던 문제이기도 하다. 이 문제에서는 '('와 ')'로만 이루어진 문자열이 주어진다. 이거는 그릇을 뜻하는 문자열이고 이 그릇의 높이를 계산해서 구하면 된다. 우선 '('나 ')' 1개가 있으면 높이는 10이다. 즉, 높이 10부터 시작한다. 그리고 .. 2022. 4. 28. 이전 1 ··· 36 37 38 39 40 41 42 ··· 52 다음 반응형