본문 바로가기

알고리즘15

[프로그래머스] (깊이/너비 우선 탐색) 단어 변환 단어집합을 탐색해 나가면서 한 글자만 다른 단어를 찾아낸 후, 그 단어로 다시 탐색을 시작하여 최종 타겟단어와 일치할 때까지의 탐색 깊이를 측정한다. 단, 최종 타겟 단어에 이르기 까지 여러가지 경로가 있을 수 있는데, 이 중 가장 짧은 길이를 반환하면 된다. 타겟 단어와 1개의 알파벳만 다른지 판별하는 함수는 별도로 작성했다. class Solution { int answer = Integer.MAX_VALUE; public int solution(String begin, String target, String[] words) { boolean[] isChecked = new boolean[words.length]; dfs(begin, target, words, isChecked, 0); if (ans.. 2021. 4. 7.
[프로그래머스] (깊이/너비 우선 탐색) 네트워크 Computer를 탐색해나가며 나와 연결된 Computer를 찾아서 하나의 네트워크로 묶어야 한다. 1. 1번 컴퓨터를 시작으로 탐색을 시작한다. isConnect[0] = true 마킹2. 1번 컴퓨터와 연결된 컴퓨터를 찾는다.(computers[?][0] == 1 인것)3. 3번째 배열에서 computers[2][1] == 1 을 만족하므로 isConnect[2] = true 마킹4. 다음 탐색을 시작한다. 5. 다시 3번 컴퓨터와 연결된 컴퓨터를 찾는다.(computers[?][2] == 1 인것)6. 4번째 배열에서 computers[3][2] == 1 을 만족하므로 isConnect[3] = true 마킹7. 다음 탐색을 시작한다.8. 4번 컴퓨터와 연결된 컴퓨터를 찾는다.(comcomputer.. 2021. 3. 29.
[프로그래머스] (깊이/너비 우선 탐색) 타겟 넘버 입력 배열 노드를 순차로 탐색 하면서 매 탐색시 양갈래(지나온 노드들의 sum에서 현재노드를 +하는 경우, -하는경우) 로 탐색하며 재귀호출 하여 마지막 노드에 도달했을때 노드들의 sum이 타겟 넘버와 같으면 타겟 적중을 +1 한다. class Solution { public int solution(int[] numbers, int target) { int answer = 0; answer = calcNum(numbers, 0, target, 0); return answer; } public static int calcNum(int[] source, int index, int target, int sum) { // 마지막 노드에 도달했을 때 if(index == source.length) { // 타겟 .. 2021. 3. 28.
[프로그래머스] (완전탐색) 카펫 갈색격자의 수가 brown, 노란격자의 수가 yellow 일때 카펫의 면적은 brown + yellow 이고 면적의 약수가 카펫의 가로,세로 길이가 된다. brown :10, yellow : 2 => 면적 : 12, 카펫가로 세로 후보군은 [1,12], [2,6], [3,4], [4,3], [6,2], [12, 1] 카펫에 노란격자는 무조건 1이상이고, 가로가 세로보다 길거나 같다는 조건이 있으므로 가능한 후보군은 [4,3] 하나뿐이다. (최소 가로/세로 길이는 3) 전체 면적까지 루프를 역순으로 돌리고, (가로-2) * (세로-2) = 노란격자의 수가 나오는 경우의 수를 찾는 문제 class Solution { public int[] solution(int brown, int yellow) { int[.. 2021. 3. 27.
[프로그래머스] (완전탐색) 소수 찾기 먼저 주어진 숫자형 문자열로 만들 수 있는 모든 숫자를 찾고 그 다음 만들어진 숫자에서 소수를 골라낸다. "17" 로 만들 수 있는 숫자는 [1, 7, 17, 71] 이고 여기서 소수는 [7, 17, 71] "011" 로 만들 수 있는 숫자는 [0, 1, 10, 11, 101, 110] 이고 여기서 소수는 [11, 101] 그림에서 보는 것 처럼 배열에서 루프를 돌며 숫자를 하나씩 뽑고, 남은 배열을 저장하면서 들고다니는 함수를 만들어서 계속 재귀호출하며 남은 배열이 없으면 전체 조합을 완료한 것으로 본다. public void pick(List arr, String picked, List permArr) { for (int i = 0; i < arr.size(); i++) { // 입력받은 배열에서 하.. 2021. 3. 27.
[LeetCode] Reverse Integer (5) Reverse Integer - LeetCode int를 입력받아서 역정렬하여 리턴하라. Example 1: Input: x = 123 Output: 321 Example 2: Input: x = -123 Output: -321 Example 3: Input: x = 120 Output: 21 간단하게 StringBuilder로 역정렬하고 음수인지 양수인지 판단해서 적절하게 바꿔주면 되는문제. 인줄 알았는데 역정렬하고 보니 Int의 범위를 벗어나는 숫자가 나오는 경우가 있다. (1,534,236,469) 따라서 내부 로직은 Long형으로 처리하고 Int의 범위를 벗어나면 0을 리턴하도록 마지막에 처리를 해줘야 한다. class Solution { public int reverse(int x) { .. 2021. 3. 25.
반응형