본문 바로가기

코딩테스트58

[DFS,BFS] 백준 10451번 순열 사이클 java https://www.acmicpc.net/problem/104518 10451번: 순열 사이클 1부터 N까지 정수 N개로 이루어진 순열을 나타내는 방법은 여러 가지가 있다. 예를 들어, 8개의 수로 이루어진 순열 (3, 2, 7, 8, 1, 4, 5, 6)을 배열을 이용해 표현하면 \(\begin{pmatrix} 1 & 2 &3&4&5&6&7&8 \\ 3 www.acmicpc.net 순열을 배열을 이용하여 표현한후 이때 윗줄의 노드가 아랫줄의 노드방향으로 간선이 그려져서 만들어지는 사이클 개수를 구하는 문제이다. 예를 들어서 순열을 위와 같은 배열로 표현하면 1에서 3으로 향하는 간선 2에서 2로 향하는 간선 3에서 7로 향하는 간선등이 그려져서 위와 같은 그래프로 그려질 것이다. 소스코드 import.. 2022. 11. 7.
[DFS,BFS] 백준 1260번 DFS와 BFS DFS(깊이우선 탐색) 최대한 깊이 내려간후 더이상 내려갈 노드가 엎다면 옆으로 이동하여 탐색하는방법 구현방법: 스택 또는 재귀함수 유리한 문제: 경로의 특징을 저장하는 문제 BFS(너비우선 탐색) 루트노드로 부터 가까운 노드 부터 탐색하는 방법 구현방법: 큐 유리 한문제: 최단거리 package BaekJoon.DFS_BFS; import java.io.*; import java.util.*; public class No1260 { static boolean[] checked = new boolean[1001]; //탐색여부 static int N; //정점 static int M; //간선 static int V; //시작정점 public static void main(String[] args) th.. 2022. 11. 7.
[완전탐색] 프로그래머스 모의고사 보호되어 있는 글 입니다. 2022. 11. 6.
[완전탐색] 백준 14889번 스타트와 링크 https://www.acmicpc.net/problem/14889 14889번: 스타트와 링크 예제 2의 경우에 (1, 3, 6), (2, 4, 5)로 팀을 나누면 되고, 예제 3의 경우에는 (1, 2, 4, 5), (3, 6, 7, 8)로 팀을 나누면 된다. www.acmicpc.net Math.abs(a) 절댓값 구하는 메소드 Math.min(a,b) 최솟값 구하는 메소드 dfs dfs로 팀구성 diff 점수차 계산 메소드 import java.util.*; public class No14889 { static int N; static int[][] arr; static int min = Integer.MAX_VALUE; static boolean[] check; public static void .. 2022. 10. 13.
[완전탐색] 백준 2503번 숫자야구 https://www.acmicpc.net/problem/2503 2503번: 숫자 야구 첫째 줄에는 민혁이가 영수에게 몇 번이나 질문을 했는지를 나타내는 1 이상 100 이하의 자연수 N이 주어진다. 이어지는 N개의 줄에는 각 줄마다 민혁이가 질문한 세 자리 수와 영수가 답한 스트 www.acmicpc.net 이문제를 풀려면 각 자릿수의 값을 비교해가면서 풀어야 하는데 1. 나눗셈으로 각 자릿수 숫자 찾아서 비교하기 2. 문자열로 바꿔서 비교하기 이렇게 두개로 나뉘는거 같다 나는 첫번째 방법으로 했는데 다풀고 나니 뭔가 2번이 더 간단했을 것 같은 느낌이 조금 든다. 각 자리에 1~9의 숫자가 곂치지 않게 나오기 때문에 123~987의 영역을 탐색해야 한다. 그리고 123~987영역에는 0이 들어간 값.. 2022. 10. 6.
[완전탐색] 백준 2231번 분해합 쉬운 문제여서 처음 써보는 메소드 같은건 없었다. 가장 작은 생성자를 구해야 하는데 처음에 실수로 가장 큰 생성자를 구해 버렸다. 문제를 잘 읽어야겠다 import java.util.Scanner; public class Main { public static void main(String[] args){ Scanner sc = new Scanner(System.in); int N = sc.nextInt(); int result = 0; for(int i = 0; i < N; i++){ int sum = i; int a = i; while(a != 0){ //각 자리수 더하기 sum += a % 10; a /= 10; } if(sum == N){ result = i; break; } } System.out.. 2022. 10. 6.