본문 바로가기

전체 글

(894)
[JAVA] 프로그래머스 - 음양 더하기 https://school.programmers.co.kr/learn/courses/30/lessons/76501 프로그래머스코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.programmers.co.kr     정답  class Solution { public int solution(int[] absolutes, boolean[] signs) { int answer = 0; for(int i=0; i  다른 사람의 풀이  class Solution { public int solution(int[] absolutes, boolean[] signs) { ..
[자바 알고리즘 인터뷰] 12장 그래프 (4) 조합 https://leetcode.com/problems/combinations/description/ - 전체 수 n을 입력받아 k개의 조합(Combination)을 리턴하라   풀이 1) DFS로 k개 조합 생성   - 조합의 경우 자기 자신뿐만 아니라 앞의 모든 엘리먼트를 배제하고 구성해야 한다.- 왜냐하면 조합은 순서를 보지 않으므로 한 번 나왔던 엘리먼트는 다시 나와야 하지 않기 때문이다. - 이 말은 이전 엘리먼트보다 이후 엘리먼트의 값을 항상 더 크게 구성할 수있다는 말이기도 하다.  public void dfs(List> results, LinkedListelements, int n, int start, int k) { //k번째 노드에 도달하면 결과에 추가 if..
[자바 알고리즘 인터뷰] 12장 그래프 (3) 순열 https://leetcode.com/problems/permutations/description/- 서로 다른 정수를 입력받아 가능한 모든 순열(Permutation)을 리턴하라   풀이 1) DFS를 활용한 순열 생성 - 순열이란 결국 모든 가능한 경우를 그래프 형태로 나열한 결과라고 할 수 있기 때문에 그래프로 표현해보면 다음과 같다.  - 리프 노드(Leaf), 즉 A3의 모든 노드가 순열의 최종 결과이다.- 레벨이 증가할수록 자식 노드의 개수가 점점 적어진다. A0의 자식 노드는 3개였다가 A1의 자식 노드는 2개, A2의 자식 노드는 1개 순으로, 이는 순열의 수식이기도 한 3*2*1 형태이기도 하다.   public void dfs(List> results, List prevElements,..
[자바 알고리즘 인터뷰] 12장 그래프 (2) 전화번호 문자 조합 https://leetcode.com/problems/letter-combinations-of-a-phone-number/description/ - 2에서 9까지 숫자가 주어졌을 때 전화번호로 조합 가능한 모든 문자를 출력하라   풀이 1) 모든 조합 탐색  -모두 조합하는 형태로 전체를 탐색한 후 백트래킹하면서 결과를 조합할 수 있다.- digits는 입력값이며, 각 자릿수에 해당하는 키판 배열을 DFS로 탐색하면 결과가 완성된다,   - 입력값인 digits의 자릿수 단위로 반복하고, 현재 자리 숫자에 해당하는 모든 문자를 탐색하면서 지금까지 구성된 문자열을 path 변수에 저장해 넘기면서 재귀 탐색한다.  public void dfs(List result, Map> dic, String digits..
[자바 알고리즘 인터뷰] 12장 그래프 (1) 섬의 개수 https://leetcode.com/problems/number-of-islands/description/  - 1을 육지로, 0을 물로 가정한 2차원 그리드 맵이 주어졌을 때, 섬의 개수를 계산하라(연결되어 있는 1의 덩어리 개수를 구하라)  풀이 1) DFS로 그래프 탐색  - 입력값이 정확히 그래프는 아니지만 사실상 동서남북이 모두 연결된 그래프로 가정하고 동일한 형태로 처리할 수 있으며, DFS 재귀를 이용해 네 방향 각각의 탐색을 끝마치면 1이 증가하는 형태로 육지의 개수를 파악할 수 있다.  - 먼저 여기서는 행렬 입력값인 grid의 행, 열 단위로 육지(1)인 곳을 찾아 진행하다가 육지를 발견하면 그때부터 dfs()를 호출해 탐색을 시작한다.  //행렬을 모두 탐색 for(int i=0; ..
[자바 알고리즘 인터뷰] 12장 그래프 그래프 - 객체의 일부 쌍(Pair)들이 '연관되어' 있는 객체 집합 구조  오일러 경로 - 모든 간선을 한 번씩 방문하는 유한 그래프  해밀턴 경로 - 각 정점을 한 번씩 방문하는 무향 또는 유향 그래프 경로 - 최적 알고리즘이 없는 N-P 완전 문제 해밀턴 순환- 해밀턴 경로 중에서 원래의 출발점으로 돌아오는 경로  외판원 문제(Travelling Salesman Problem)- 한 번만 방문하여 출발지로 돌아오는 경로 중 가장 짧은 경로    그래프 순회(Graph Traversal)- 그래프의 각 정점을 방문하는 과정 - 그래프를 인접 리스트로 표현한 예- 인접 리스트는 출발 노드를 키로, 도착 노드를 값으로 표현 Map> graph = new HashMap();graph.put(1,Arrays..
[JAVA] 프로그래머스 - 덧칠하기 https://school.programmers.co.kr/learn/courses/30/lessons/161989 프로그래머스코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.programmers.co.kr        [프로그래머스] 덧칠하기 - 자바(Java) (tistory.com) [프로그래머스] 덧칠하기 - 자바(Java)문제 링크 https://school.programmers.co.kr/learn/courses/30/lessons/161989 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁ittrue.tisto..
[JAVA] 프로그래머스 - 직사각형 별찍기 https://school.programmers.co.kr/learn/courses/30/lessons/12969 프로그래머스코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.programmers.co.kr     정답  import java.util.Scanner;class Solution { public static void main(String[] args) { Scanner sc = new Scanner(System.in); int a = sc.nextInt(); //가로 int b = sc.nextInt(); //세로 for(int i=0; i