본문 바로가기

알고리즘 공부 및 문제 풀이/프로그래머스(PRO)

(81)
[pro] 프로그래머스 level3 42892 길 찾기 게임 (Java) - 이진트리 [문제] https://school.programmers.co.kr/learn/courses/30/lessons/42892 [풀이] 직접 이진트리를 구성한 뒤, preorder과 postorder를 돌리면 된다. [코드] import java.util.*; class Solution { int idx; public int[][] solution(int[][] nodeinfo) { int[][] answer = {}; //전위 순회, 후위 순회한 결과를 2차원 배열에 순서대로 담아 return Node[] nodes = new Node[nodeinfo.length]; for(int i=0; i
[pro] 프로그래머스 level3 42861 섬 연결하기 (Java) - MST [문제] https://school.programmers.co.kr/learn/courses/30/lessons/42861 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr [풀이] 모든 섬을 서로 연결하는 최소의 비용을 구하는 문제이므로 최소 신장 트리 MST를 구하는 크루스칼 알고리즘을 이용하여 풀었다. [코드] import java.util.*; class Solution { int[] parent; public int solution(int n, int[][] costs) { int answer = 0; //최소의 비용으로 모든 섬이 서로 통행 가능하..
[pro] 프로그래머스 level3 42884 단속카메라 (Java) - 그리디 [문제] https://school.programmers.co.kr/learn/courses/30/lessons/42884 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr [풀이] 먼저 차량이 고속도로를 나간 지점을 기준으로 오름차순 정렬한다. (카메라가 설치되어야 하는 지점) 만약 카메라 설치 위치가 현재 route의 진입지점보다 작다면 카메라를 진출 지점으로 옮겨 설치하도록 하고, 더 크다면 현재 route가 단속카메라를 이미 만날 수 있기 때문에 다음 route로 넘어간다. [코드] import java.util.*; class Solution { p..
[pro] 프로그래머스 level3 42895 N으로 표현 (Java) - dp [문제] https://school.programmers.co.kr/learn/courses/30/lessons/42895 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr [풀이] dfs로 완전탐색하여 푸는 방법을 먼저 생각했으나 dp 카테고리에 있는 걸 봐버려서 더 효율적으로 푸는 방법이 있겠군 싶었다..dp로 풀어야 한다는 걸 알아도 생각이 안나는게 문제지만ㅠ N이 사용된 횟수를 기준으로 한다. N이 사용된 횟수가 1번이면 N 자신밖에 없을 것이다. 2번이면 N+N, N-N, N*N, N/N, NN 등이 있을 것이다. 그렇다면 N이 사용된 횟수가 3번이..
[pro] 프로그래머스 level3 72415 카드 짝 맞추기 (Java) - BFS, DFS [문제] https://school.programmers.co.kr/learn/courses/30/lessons/72415 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr [풀이] 1. 어떤 순서로 카드의 짝을 맞췄을 때 최소 조작 횟수가 될 지 알수없으므로 모든 순열에 대해서 탐색해야 한다. 따라서 dfs를 이용한 순열을 먼저 구한다. 2. 해당 순서별로 조작횟수를 구한 후 최소값을 답으로 한다. bfs를 이용해서 최소 조작 횟수를 구할 수 있다. 1) 해당 target card에 도착했을 경우 -> 최소 키 조작 횟수 리턴 2) 상, 하, 좌, 우 한 ..
[pro] 프로그래머스 level3 43162 네트워크 (Java) - BFS [문제] https://school.programmers.co.kr/learn/courses/30/lessons/43162 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr [풀이] 단순한 BFS 문제. [코드] import java.util.*; class Solution { boolean[] visited; public int solution(int n, int[][] computers) { int answer = 0; //네트워크의 개수를 return visited = new boolean[n]; for(int i=0; i
[pro] 프로그래머스 level3 42898 등굣길 (Java) - dp [문제] https://school.programmers.co.kr/learn/courses/30/lessons/42898 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr [풀이] 웅덩이가 있다면 그 길을 통해서 올 수 없으므로 계산을 하지 않는다. 위 경우를 제외하고는 좌표에서 벗어나지 않는 범위에서, 위에서 오는 경우의 수와 왼쪽에서 오는 경우의 수를 dp 배열에 더해줌으로써 계산 가능하다. [코드] class Solution { public int solution(int m, int n, int[][] puddles) { int answer = 0; ..
[pro] 프로그래머스 level3 43105 정수 삼각형 (Java) - dp [문제] https://school.programmers.co.kr/learn/courses/30/lessons/43105 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr [풀이] 전형적인 dp 문제. [코드] class Solution { int[][] dp; public int solution(int[][] triangle) { int answer = 0; // 거쳐간 숫자의 최댓값을 return dp = new int[triangle.length][triangle.length]; for(int i=0; i