알고리즘

·Algorithm
문제문제 바로가기풀이배열을 순회하면서, 이웃한 배열들을 검사한 건물의 조망권이 확보된 세대 갯수 = 해당 건물의 높이 - 양 옆으로 이웃한 네개의 건물중 가장 높은 건물 OR 0배열 인덱싱 에러만 잘 처리하면 쉽게 풀리는 문제코드import java.util.*;import java.io.FileInputStream;class Solution{public static void main(String args[]) throws Exception{Scanner sc = new Scanner(System.in); for(int test_case = 1; test_case = 0 && nearbyHeight = 0 && nearbyHeight   # 결과![](https://velog.velcdn.com/i..
·Algorithm
문제문제 바로가기문제 풀이언뜻보면 쉬워 보이지만, ?조건 때문에 BFS/DFS로 풀어야한다.나 같은 경우는 재귀를 활용한 DFS로 문제를 해결했다.방문 처리를 할 때는 (좌표, memory, 방향)을 모두 고려해야한다.매우 악질적인 케이스를 고려해야한다.Case 39해당 케이스는 정답이 없으므로 모든 경우를 탐색해야 하는데, 이럴 경우 4^20 =. 1.0995116e+12 경우의수,,, 나는 @ 가 없으면 탐색을 안하는 방법으로 케이스를 회피했다.Case 40해당 케이스는 정답은 있는데, 정답에 접근할 수 없는 매우 악질적인 테스트 케이스이다.사실 저 정답 주위를 계속 돌다보면 memory가 15에서 0으로 초기화 된 후, 중복 방문 처리가 되어 프로그램이 종료되어야 하지만.. 이러한 방법은 메모리 크..
·Algorithm
문제문제 바로가기풀이Back Tracking을 이용하여 해결Stack을 사용하여 구현현재 위치에서 이동 가능한 위치가 있으면 Stack에 추가만약 이전에 방문한 적이 있는 위치이면 추가 XSet을 사용하여 이전에 방문한 위치 기록Stack에서 Pop한 위치를 탐색만약에 pop하여 얻은 위치에서 이동 가능한 경로가 없으면 다시 pop위 과정을 Stack이 비어있거나, 목적지에 도착할 때 까지 반복코드import java.util.*;import java.io.FileInputStream;class Solution{ public static void main(String args[]) throws Exception { Scanner sc = new Scanner(System.in);..
·Algorithm
문제문제 바로 가기문제 풀이문제 조건중 한 막대에서 출발한 가로선이 다른 막대를 가로질러서 연속하여 이어지는 경우는 없다. 라는 조건 덕에, 복잡한 케이스 고려X사다리 맨 마지막의 도착지로부터 역으로 추적현재 이동 방향을 표시하는 direction변수를 사용하여 유동적으로 방향 전환현재 방향이 위로 향하는 경우위로 향하던 도중, 양 옆에 길이 있으면 그 길로 빠져야함가로선이 다른 막대를 가르는 경우는 없기 때문에, 왼쪽 또는 오른쪽 길이 발견되면 바로 그쪽 길로 향하면 됨update direction옆의 길이 발견되지 않으면 계속 위로 이동현재 방향이 오른쪽으로 향하는 경우현재 위치의 오른쪽에 길이 있으면 계속 오른쪽으로 이동길이 막히면 위로 이동, update direction현재 방향이 왼쪽으로 향하..
·Algorithm
문제문제 바로가기풀이처음에는 모든 경우의 수를 탐색하면서 Set에 추가하여 풀었지만 시간초과.문제는 최대 100가지 이므로, 경우의 수는 2^100 이고 당연히 시간 초과가 발생한다.DP를 사용하여 문제 해결각 배점을 탐색하면서 만들 수 있는 경우의 수를 DP에 기록해당 배점을 선택하기 이전까지 DP배열에 기록된 모든 값들 + 현재 탐색중인 배점을 DP 배열에 기록위의 방식대로 계속해서 배점 탐색최종적으로 DP 배열에 기록된 갯수를 출력코드import java.util.*;// dp로 탐색// 최대 점수만큼의 크기를 가지는 dp 배열 생성// 1. 한 문제씩 선택// 2. 해당 문제를 dp배열에 기록// 3. 지금 까지 기록된 dp배열에 선택된 문제를 더한 값도 dp에 기록// 4. 계속 문제 선택하면서..
·Algorithm
문제 풀기문제 설명풀이DP(Dynamic Programming, 동적 프로그래밍)를 이용하여 해결 가능한 문제완전 탐색을 이용해서도 해결 가능해 보이지만, 그럴 경우 프로그래머스 효율성 검사에서 걸리지 않을까 싶다.피라미드 꼭대기에서부터 내려오면서, 거칠수 있는 최대값을 기록할 2차원 배열을 사용한다.위에서 생성한 배열을 사용하여, 꼭대기에서 부터 해당 위치까지의 최대값을 기록한다.여기서 윗줄의 값의 경우, 이미 꼭대기에서 부터 모든 최대 경우를 반영하고 있기 때문에 바로 윗줄의 케이스만 고려하면서 값을 채워나가면 된다.코드import java.util.*;class Solution { public int solution(int[][] triangle) { // dp 배열 초기화 ..
Im_Hayden
'알고리즘' 태그의 글 목록