실버3 달팽이 구현
·
알고리즘/Array(1, 2차원 배열)
1. 문제 2. 나의 풀이이런 문제를 풀기 위해서는 규칙성을 찾는 게 중요하다고 생각했다.상하좌우 이동을 개별적 메서드로 만들었을 때, Up과 Right, Down과 Left의 시행 횟수가 같다는 걸 알았다.또한 시행 횟수가 Up,Right -> Down,Left -> Up, Right -> .... 로 흘러갈 때 마다 시행 횟수가 1씩 증가한다. 즉, Up, Right 한 번 씩 -> Down, Left 두 번씩 -> Up, Right 세 번씩 -> ... 이걸 구현하면 끝이당 3. 나의 코드import java.util.Scanner;public class Main { public static StringBuilder sb; public static int[][] arr; publi..
기초 수학 - 순열
·
알고리즘/기초 수학
고등학교때 씹어먹었던 확통이지만, 고등학교 공부를 안한 지 6년이 지나 순열? 중복 순열? 머더라? 다시 정립한다.1. 순열1.1 기본 개념순열이란 순서있게 나열한다는 뜻이다. (서로 다른 숫자) 예를 들어 숫자 1, 2, 3이 있다고 하면(1, 2, 3), (1, 3, 2), (2, 1, 3), (2, 3, 1), (3, 1, 2), (3, 2, 1)총 6가지로 나열할 수 있다.이를 P(n, r) = n! / (n-r)! 으로 계산한다. 위 예시는 P(3, 3)으로 3! / 0! = 6가지 1.2 실생활 예시순열은 수학적인 접근보다는 실제 예시를 논리적으로 생각해보면 쉽다. 예를 들어 5명 중 1등, 2등, 3등을 뽑는다고 하자.수학적으로 접근하면 P(5, 3) = 5! / (5-3)! 이다. 그러나..
백준 1213번 팰린드롬 만들기
·
알고리즘/String(문자열)
1. 문제 2. 나의 풀이팰린드롬은 좌우 대칭이다.문자열과 구현 문제이기 때문에 어느 조건에서 팰린드롬을 만들 수 없는 지 생각했다. 처음에 팰린드롬이 될 수 없는 조건은 개수가 1개인 알파벳이 여러개인 경우라고 생각했다.그러나 조금 더 생각해보니 개수가 홀수인 알파벳이 여러개인 경우(2개 이상)이라고 생각했다. AAABBB가 팰린드롬을 만들 수 없는 것 처럼...각 문자의 개수를 카운팅하기 때문에 해시맵을 사용하고자 했다. 추가로 팰린드롬을 어떻게 만들어야할 까 고민이 많았는데 좌우 대칭이기 때문에 Left랑 Mid만 구하고 Right 부분은 Left를 역정렬 하면 된다.public class ac1213 { public static void main(String[] args) { S..
자바 알고리즘 문법 정리
·
알고리즘/다시 시작!
1. 입력public class Main{ public static void main(String[] args) throws IOException{ BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); StringTokenizer st = new StringTokenizer(br.readLine()); Scanner sc = new Scanner(System.in); }} 2. 문자열 String str = "apple"; str.length(); // 5 str.charAt(0); // a str.indexOf("p"); // 1 ..
6. 순열 구하기
·
알고리즘/DFS, BFS 활용
1. 문제 숫자 개수 n, 나열하는 숫자의 수 m 첫번 째 줄에 n과 m 두번 째 줄에 숫자를 입력받는다 입력 3 2 3 6 9 출력 3 6 3 9 6 3 6 9 9 3 9 6 2 - 1. 나의 풀이 DFS로 풀었다. 필요한 배열 1. 숫자를 저장할 arr 배열 2. 만약 3을 사용했을 경우 중복이 되면 안되므로 3을 사용했다는 표시를 하기 위해 체크배열(ch)가 필요하다. 3. 순열을 저장할 배열 pm 2 - 2. 나의 코드 package DFS_BFS_levelup; import java.util.*; public class pratice_myself { public static int n,m; public static int[] arr, ch,pm; public static void DFS(int ..
5. 동전교환
·
알고리즘/DFS, BFS 활용
1. 문제 설명 다음과 같이 여러 단위의 동전들이 주어져 있을때 거스름돈을 가장 적은 수의 동전으로 교환해주려면 어떻게 주면 되는가? 각 단위의 동전은 무한정 쓸 수 있다. 입력 첫 번째 줄에는 동전의 종류개수 N(1 m) return; if(L>= answer) return; if(sum == m){ answer = Math.min(answer, L); }else if (sum < m){ for (int i = 0; i < n; i++) { DFS(L + 1, sum + arr[i]); } } } public static void main(String[] args) { Scanner sc = new Scanner(System.in); n = sc.nextInt(); arr = new Integer[n]..
4. 중복 순열
·
알고리즘/DFS, BFS 활용
1. 문제 1부터 N까지 번호가 적힌 구슬이 있습니다. 이 중 중복을 허락하여 M번을 뽑아 일렬로 나열 하는 방법을 모두 출력합니다. 자연수 N과 M이 주어진다. (3
3. 최대 점수 구하기(DFS)
·
알고리즘/DFS, BFS 활용
1. 문제 설명 이번 정보올림피아드대회에서 좋은 성적을 내기 위하여 현수는 선생님이 주신 N개의 문제를 풀려고 합니다. 각 문제는 그것을 풀었을 때 얻는 점수와 푸는데 걸리는 시간이 주어지게 됩니다. 제한시간 M안에 N개의 문제 중 최대점수를 얻을 수 있도록 해야 합니다. (해당문제는 해당시간이 걸리면 푸는 걸로 간주한다, 한 유형당 한개만 풀 수 있습니다.) 입력 첫 번째 줄에 문제의 개수N(1
2. 바둑이 승차(DFS)
·
알고리즘/DFS, BFS 활용
1. 문제 트럭에 태울 수 있는 무게 한계치 W와 N마리의 바둑이와 바둑이의 무게들이 주어진다. 트럭에 태울 수 있는 가장 무거운 무게를 구하는 프로그램 2 - 1. 나의 풀이 간단한 DFS 문제이다. 각 숫자들을 배열에 저장한 다음 arr[L]을 사용 or 미사용하면서 DFS 갈래를 뻗어나간다. 하지만 한계치 W를 넘어가면 중단하고 다음 으로 넘어간다. 2 - 2. 나의 코드 package DFS_BFS_levelup; import java.util.*; public class dfs02_myself { public static int w; public static int n; public static int[] arr; public static int answer; public static void ..