본문 바로가기

알고리즘

(66)
메이즈 러너[G3] https://www.codetree.ai/training-field/frequent-problems/problems/maze-runner/description?page=1&pageSize=20&statuses=Passed 코드트리 | 코딩테스트 준비를 위한 알고리즘 정석국가대표가 만든 코딩 공부의 가이드북 코딩 왕초보부터 꿈의 직장 코테 합격까지, 국가대표가 엄선한 커리큘럼으로 준비해보세요.www.codetree.ai 풀이 핵심은 먼저 배열 돌리기 시 '상대좌표'를 사용해서 돌리는 것.두번째로 브루트 포스를 사용하여 가장 작은 사각형 위치를 찾는 것 두가지다.모험가 이동 패턴은 전반적으로 무난했는데, 이게 왜 G3인지 이해하기 쉽지 않다..import java.io.*;import java.util.*..
포탑 부수기[G1] https://www.codetree.ai/training-field/frequent-problems/problems/destroy-the-turret/description?page=1&pageSize=20 코드트리 | 코딩테스트 준비를 위한 알고리즘 정석국가대표가 만든 코딩 공부의 가이드북 코딩 왕초보부터 꿈의 직장 코테 합격까지, 국가대표가 엄선한 커리큘럼으로 준비해보세요.www.codetree.ai 2트만에 성공주요 쟁점은 배열 대신 Tower 객체를 사용하는 것.그리고 Compable과 핸디캡 쪽 순서 처리.  import java.util.*;import java.io.*;class Main { static int N, M, K; static Tower[][] map; static List to..
[소프티어] 나무 섭지 LV.3 문제https://softeer.ai/practice/7726 Softeer - 현대자동차그룹 SW인재확보플랫폼 softeer.ai  자세한 내용은 원문 코드를 참조할 것. 풀이유령이 과연 남우를 잡을 수 있을까? 에 대한 풀이는 간단하다.BFS를 사용하여, '벽을 뚫을 수 있는' 유령의 최단거리보다 남우의 '최단거리' 가 짧으면 된다. 따라서, BFS를 유령 / 남우, 두 번씩 비교하여 최소값을 비교하면 된다. 여기서 시간 초과가 발생할 수 있는데, BFS의 범위 스코프를 '유령' 값의 스코프를 통해 비교해주면 된다.전체 탐색의 경우 2.08초(처음에 시간 초과가 발생했다)였으나, 풀이 이후 0.1초 이내로 풀 수 있었다. 하위 코드에서는 'ghostDist'를 통해 스코프를 제한했다.아래 코드에서 해..
[소프티어] 함께하는 효도 LV.3 문제https://softeer.ai/practice/7727 Softeer - 현대자동차그룹 SW인재확보플랫폼 softeer.ai  자세한 내용은 원문 코드를 참조할 것. 풀이 처음에는 dp[Idx][R][C]를 통해, 각 친구(idx)별 경로를 추적하여 dp를 사용하고자 했으나,백트래킹으로 각 위치별 수집량을 점유한 뒤, 이를 다음 친구로 적용하는 로직으로 풀이를 변경하였다. 풀이는 다음과 같다. 1. 0번째 인덱스(첫번째 친구)를 먼저 탐색한다.2. if 기저조건 : time = 3초일 경우 해당 값을 저장한 채로, idx를 증가한 뒤 재귀 함수를 시행한다(다음 친구 호출)3. 최종 조회 시 최대값을 비교한다.4. 백트래킹을 통해 가지치기를 수행한다. 자세한 내용은 코드를 참조할 것 코드 impor..
1520 - 내리막길[G3] 문제문제여행을 떠난 세준이는 지도를 하나 구하였다. 이 지도는 아래 그림과 같이 직사각형 모양이며 여러 칸으로 나뉘어져 있다. 한 칸은 한 지점을 나타내는데 각 칸에는 그 지점의 높이가 쓰여 있으며, 각 지점 사이의 이동은 지도에서 상하좌우 이웃한 곳끼리만 가능하다. 현재 제일 왼쪽 위 칸이 나타내는 지점에 있는 세준이는 제일 오른쪽 아래 칸이 나타내는 지점으로 가려고 한다. 그런데 가능한 힘을 적게 들이고 싶어 항상 높이가 더 낮은 지점으로만 이동하여 목표 지점까지 가고자 한다. 위와 같은 지도에서는 다음과 같은 세 가지 경로가 가능하다.  지도가 주어질 때 이와 같이 제일 왼쪽 위 지점에서 출발하여 제일 오른쪽 아래 지점까지 항상 내리막길로만 이동하는 경로의 개수를 구하는 프로그램을 작성하시오.입력첫..
1932 - 정수 삼각형[S1] 문제https://www.acmicpc.net/problem/1932  7 3 8 8 1 0 2 7 4 44 5 2 6 5위 그림은 크기가 5인 정수 삼각형의 한 모습이다.맨 위층 7부터 시작해서 아래에 있는 수 중 하나를 선택하여 아래층으로 내려올 때, 이제까지 선택된 수의 합이 최대가 되는 경로를 구하는 프로그램을 작성하라. 아래층에 있는 수는 현재 층에서 선택된 수의 대각선 왼쪽 또는 대각선 오른쪽에 있는 것 중에서만 선택할 수 있다.삼각형의 크기는 1 이상 500 이하이다. 삼각형을 이루고 있는 각 수는 모두 정수이며, 범위는 0 이상 9999 이하이다.풀이전형적인 배열 형태의 DP 사용을 고려하였으나, 비슷한 방식을 사용하였다.바닥..
Summer/Winter Coding(~2018) 방문 길이 문제https://school.programmers.co.kr/learn/courses/30/lessons/49994 프로그래머스코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.programmers.co.kr  게임 캐릭터를 4가지 명령어를 통해 움직이려 합니다. 명령어는 다음과 같습니다. U: 위쪽으로 한 칸 가기 D: 아래쪽으로 한 칸 가기 R: 오른쪽으로 한 칸 가기 L: 왼쪽으로 한 칸 가기 캐릭터는 좌표평면의 (0, 0) 위치에서 시작합니다. 좌표평면의 경계는 왼쪽 위(-5, 5), 왼쪽 아래(-5, -5), 오른쪽 위(5, 5), 오른쪽 아래(5, -5)로 이루어져 있습니다. 방문길이1_qp..
16953 - A -> B[S2] 문제정수 A를 B로 바꾸려고 한다. 가능한 연산은 다음과 같은 두 가지이다.2를 곱한다.1을 수의 가장 오른쪽에 추가한다. A를 B로 바꾸는데 필요한 연산의 최솟값을 구해보자.풀이 BFS의 기본 변형 같은 문제.두 가지의 경우의 수를 반복해서 탐색하면 된다. 이를 위해 PriorityQueue를 선언 후, Comparator로 최대값을 먼저 순회하도록 설정하였다. 그 외에 Long 타입 int 캐스팅 시 long 원시형으로 변형 후 두 번 변형해야 한다는 점 유의할 것.코드 import java.io.*;import java.util.*;public class Main { static long N, M; static int result = -1; public static void main..